Hook Keyboard Hook вызывается периодически, GetMessage никогда не возвращается

Я установил низкоуровневый хук клавиатуры в рабочем потоке, который также запускает цикл сообщений. Около 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 );
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]