0

メッセージ ループも実行するワーカー スレッドに、低レベルのキーボード フックを設定しました。キー ストロークの約 1/3 がフック関数をトリガーし、メッセージ ループで GetMessage 関数を解放するものはありません。後者に関連するものがあるため、メッセージもキューに入れられません (Windows のメッセージ ループを使い始めたばかりです)。一部のキーストロークだけでフックがトリガーされる原因は何ですか? GetMessage を正しく動作させるために欠けている設定/関数呼び出しはありますか (これによれば、も欠けていません)。

これは私のフック設定とメッセージループです:

MIL_UINT32 MFTYPE MessageThread( void *v_DataEx )
{
MSG msg;

// Setup key listener
keyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
HINSTANCE instance = GetModuleHandle(NULL);
hookRes = SetWindowsHookEx( WH_KEYBOARD_LL, &KeyStrokeHook, instance, 0 );
HWND h = FindWindow( NULL, NULL );

while(GetMessage( &msg, h, 0, 0 ) > 0) // also tried with h = 0
{
    printf("Received message\n");
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
UnhookWindowsHookEx( hookRes );
return M_TRUE;
}

そして私のフック関数:

LRESULT CALLBACK KeyStrokeHook( _In_  int code, _In_  WPARAM wParam, _In_  LPARAM lParam )
{
if( code < 0 )
    return CallNextHookEx( hookRes, code, wParam, lParam );

if( wParam == WM_KEYDOWN ) // If key pressed, not released
{
    keyStroke = ((KBDLLHOOKSTRUCT *)lParam)->vkCode;

    SetEvent( keyEvent );
}
return CallNextHookEx( hookRes, code, wParam, lParam );
}
4

0 に答える 0