首页 > 编程语言 > 详细

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

时间:2020-12-12 09:34:16      阅读:63      评论:0      收藏:0      [点我收藏+]
 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

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

原文:https://www.cnblogs.com/leikaifeng/p/14123662.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!