【发布时间】:2011-11-19 12:05:24
【问题描述】:
我一直在尝试用钩子做一些事情,但我不明白为什么钩子必须与消息队列一起使用
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 线程,屏障也不起作用。为什么hook和unhook之间的等待不能换一种方式呢?
编辑:
我在创建这个示例时犯了一个错误,我创建了一个 WH_KEYBOARD_LL 钩子,而不是 WH_KEYBOARD,(我认为这不会有很大的不同)
此外,循环永远不会执行,只会等待 GetMessage 函数。
只有在我发布退出消息PostThreadMessage(id, WM_QUIT, 2323, NULL); 时才会执行循环,所以我不明白它除了等待之外还有什么作用,是否有一些内部处理?
相关:
【问题讨论】:
标签: c++ hook message-queue