Win32控制台中挂全局键盘或鼠标钩子的示例C/C++


 1 #include <iostream>
 2 #include <windows.h>
 3 
 4 
 5 LRESULT CALLBACK CallBackProc(int nCode, WPARAM wParam, LPARAM lParam) {
 6 
 7     std::cout << "回调调用,线程ID:" << GetCurrentThreadId() << std::endl;
 8 
 9     return CallNextHookEx(0, nCode, wParam, lParam);
10 }
11 
12 int main()
13 {
14     
15     //WH_KEYBOARD_LL 为全局键盘钩子, WH_MOUSE_LL 为全局鼠标钩子
16     //不管任何钩子,回调函数的签名都是一样的,只不过如何解释回调函数的参数有所不同
17 
18     if (NULL == SetWindowsHookExW(WH_KEYBOARD_LL, CallBackProc, GetModuleHandleW(nullptr), 0)) {
19        
20         std::cout << "Error Code:" << GetLastError() << std::endl;
21     }
22     else {
23 
24 
25         std::cout << "挂接成功,线程ID:" << GetCurrentThreadId() << std::endl;
26         while (true)
27         {
28             MSG msg;
29             GetMessageW(&msg, nullptr, 0, 0);
30 
31         }
32     }
33 
34 }

全局键盘鼠标钩子,哪个线程挂的就会在哪个线程里调用回调函数,并不会注入其他进程中,所以控制台中若要使线程可以调用回调函数而不会一直阻塞,必须调用GetMessageW使线程进入消息循环,这样才会生效

如果要设置全局鼠标钩子只需要将SetWindowsHookExW的第一个参数改为WH_MOUSE_LL


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM