当前位置:首页 > 编程技术 > 正文

膜拜各位黑阔大牛~小弟小白,啥都不会啥都不懂。要密码的私密就可以了,勿社!谢谢合作!

不使用DLL实现全局键盘钩子【原创】

废话不多说,看代码


  1. #include <Windows.h>
  2. HINSTANCE   m_hInstance = NULL;
  3. HHOOK       m_hHook = NULL;
  4. LRESULT CALLBACK KeyBoardProc(
  5.     int nCode,
  6.     WPARAM wParam,
  7.     LPARAM lParam)
  8. {
  9.     if (nCode == HC_ACTION && wParam == WM_KEYDOWN)
  10.     {
  11.         tagKBDLLHOOKSTRUCT *tag = (tagKBDLLHOOKSTRUCT *) lParam;
  12.         //屏蔽F2按键
  13.         if (tag->vkCode == VK_F2)
  14.         {
  15.             return TRUE;
  16.         }
  17.     }
  18.     return CallNextHookEx(m_hHook, nCode, wParam, lParam);
  19. }
  20. int WINAPI WinMain(
  21.     HINSTANCE hInstance,
  22.     HINSTANCE hPrevInstance,
  23.     LPSTR    lpCmdLine,
  24.     int       nCmdShow)
  25. {
  26.     m_hInstance = (HINSTANCE) hInstance;
  27.     //安装全局键盘钩子
  28.     m_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardProc, m_hInstance, NULL);
  29.     MSG msg;
  30.     while (GetMessage(&msg, NULL, 0, 0))
  31.     {
  32.     }
  33.     return 0;
  34. }
刚开始,小编直接在
while(GetMessage)
这个位置直接Sleep


  1. while(1)
  2. {
  3.     Sleep(1000);
  4. }
运行程序时,觉得系统卡了一下,然后也没屏蔽掉键盘,用工具看了一下,发现这个钩子是安装成功的。
后面上网找了一下资料,有位网友说要消息循环,没想到真的成功了。
还有一点,如果在其它线程SetWindowsHookEx,在后面也要跟上一个消息循环,具体原因不清楚,求大牛指导一下小菜。

安全联盟站长平台