Почему SetWindowshookex будет использоваться с очередью сообщения Windows

Я пробую некоторые вещи с крючками, и я не понимаю, почему крючки должны использоваться с очередью сообщений

hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
        TranslateMessage(&msg);
        DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);

Почему что-то не так ужходит?

hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, 0);
cin >> aKey;
UnhookWindowsHookEx(hook);

Использование потоков Boost и барьер тоже не работает. Почему не может в ожидании между крючком и отцеплением быть выполненным другим способом?

Редактировать:

Я сделал ошибку, когда я создал этот образец, я сделал Создать крючок wh_keyboard_ll, не wh_keyboard, (я не думаю, что это имеет большое значение)

Также цикл никогда не выполняется только ждет только на функции GetMessage.

Структура выполняется только в том случае, если я публикую сообщение о выходе Postthreadmessage (ID, WM_QUIT, 2323, NULL); Итак, я не понимаю, что он делает рядом с ожиданием, есть ли какая-то внутренняя обработка?

связано:

C ++ SetWindowshookex wh_keyboard_ll исправить настройку

Как я могу настроить крючок CBT на консоли Win32?

15
задан Community 23 May 2017 в 12:09
поделиться