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