Por que SetWindowsHookEx deve ser usado com uma fila de mensagens do Windows
Estou tentando algumas coisas com ganchos e não entendo por que ganchos devem ser usados com uma fila de mensagens
hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hook);
Por que algo assim não funciona?
hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, 0);
cin >> aKey;
UnhookWindowsHookEx(hook);
Usando threads de reforço, e uma barreira também não funciona. Por que a espera entre o gancho e o desengate não pode ser feita de outra maneira?
EDITAR
Cometi um erro quando criei este exemplo, crio um gancho WH_KEYBOARD_LL, não WH_KEYBOARD (não acho que isso faça uma grande diferença)
Além disso, o loop nunca executa apenas espera na função GetMessag
O loop é executado somente quando eu postar a mensagem de encerramentoPostThreadMessage(id, WM_QUIT, 2323, NULL);
então eu não entendo o que ele faz além de esperar, existe algum processamento interno?
RELATED:
C ++ SetWindowsHookEx WH_KEYBOARD_LL Instalação correta
Como posso configurar um gancho de CBT em uma janela de console do Win3