我正在尝试使用SetWindowsHookEx在键盘上设置挂钩,我希望程序继续运行,所以我在钩子设置后添加了(TRUE)。
int main()
{
SetHook();
while (TRUE)
{
}
return 0;
}
现在,这对我不起作用所以我搜索了它,我看到了这个:
int main()
{
SetHook();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
}
return 0;
}
为什么这有效,而(TRUE)不是<?p?
由于
答案 0 :(得分:0)
MSDN说您需要提取消息,因为某些挂钩可能会在您的线程中执行:
因为钩子在应用程序的上下文中运行,所以它们必须匹配&#34; bitness&#34;申请。如果32位应用程序在64位Windows上安装全局挂钩,则会在每个32位进程中注入32位挂钩(通常的安全边界适用)。在64位进程中,线程仍被标记为“#34; hooked”。#34;但是,因为32位应用程序必须运行钩子代码,系统才会在钩子应用程序的上下文中执行钩子;特别是在调用SetWindowsHookEx的线程上。 这意味着挂钩应用程序必须继续提取消息,否则可能会阻止64位进程的正常运行。
答案 1 :(得分:-1)
while(GetMessage ...)不断从队列中检索待处理的消息。按下键盘按钮后,GetMessage功能将检索相关消息。
使用while(TRUE),您只需输入一个空循环。线程繁忙&#34;什么都不做&#34;所以程序一直在运行。