Thank you for these investigations This is really nice. I support those patches.
I just wanted to also communicate a bit of additional information from my investigations just in case someone asks. I placed hooks on both WH_KEYBOARD_LL and WH_KEYBOARD. Even when the IME is active both of those hooks showed the VKEY of the actual keystroke.
This showed me that all of this processing happened after process_keyboard_message.
great work and thanks, -aric
ByeongSik Jeon wrote:
When the MS Windows set the vkey value(MSG.wParam) to VK_PROCESSKEY?
I have tested following code:
while ( GetMessage(&msg, 0, 0, 0) ) { if ( msg.message == WM_KEYDOWN ) printf("OLD: %x %x %x\n", msg.message, msg.wParam, msg.lParam); TranslateMessage( &msg ); if ( msg.message == WM_KEYDOWN ) printf("NEW: %x %x %x\n", msg.message, msg.wParam, msg.lParam); DispatchMessage( &msg ); }
The result is:
OLD: 100 e5 130001 NEW: 100 e5 130001 OLD: 100 e5 250001 NEW: 100 e5 250001 OLD: 100 e5 130001 NEW: 100 e5 130001 ----------------------------- e5 is VK_PROCESSKEY. Before GetMessage, PeekMessage return, msg.wPram ahs seted to VK_PROCESSKEY.
dlls/user32/message.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)