保持HOOK运行

时间:2018-03-24 09:50:10

标签: c winapi hook keyboard-hook setwindowshookex

我正在尝试使用SetWindowsHookEx在键盘上设置挂钩,我希望程序继续运行,所以我在钩子设置后添加了(TRUE)。

 int main()
 {
   SetHook();

   while (TRUE)
   {
   }

   return 0;
}

现在,这对我不起作用所以我搜索了它,我看到了这个:

int main()
{
   SetHook();

   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0))
   {
   }

   return 0;
}

为什么这有效,而(TRUE)不是<?p?

由于

2 个答案:

答案 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;所以程序一直在运行。