我一直在尝试使用钩子进行一些操作,但我不明白为什么钩子必须与消息队列一起使用
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);
使用增强线程,并且屏障也不起作用。为什么挂机和脱机之间的等待不能以其他方式完成?
EDIT:
创建此示例时我犯了一个错误,我创建了 WH_KEYBOARD_LL 挂钩,而不是 WH_KEYBOARD,(我认为这没有很大区别)
此外,循环永远不会执行,只会等待 GetMessage 函数。
仅当我发布退出消息时循环才会执行PostThreadMessage(id, WM_QUIT, 2323, NULL);
所以我不明白它除了等待之外还有什么作用,是否有一些内部处理?
RELATED:
C++ SetWindowsHookEx WH_KEYBOARD_LL 正确设置
如何在 Win32 控制台窗口上设置 CBT 挂钩?