11#include " pch.h"
22#include " HutaoNativeInputLowLevelKeyboardSource.h"
33
4- // 全局变量来存储钩子句柄和回调函数
54static HHOOK g_keyboardHook = nullptr ;
65static void * g_callback = nullptr ;
76
8- // 键盘钩子过程函数
97static LRESULT CALLBACK LowLevelKeyboardProc (int nCode, WPARAM wParam, LPARAM lParam)
108{
119 if (nCode >= 0 && g_callback != nullptr )
1210 {
13- // 调用回调函数
14- // 回调函数签名:BOOL (*callback)(uint, KBDLLHOOKSTRUCT*)
1511 typedef BOOL (CALLBACK* KeyboardCallback)(uint, KBDLLHOOKSTRUCT*);
1612 KeyboardCallback callback = reinterpret_cast <KeyboardCallback>(g_callback);
1713
1814 KBDLLHOOKSTRUCT* pKeyboardStruct = reinterpret_cast <KBDLLHOOKSTRUCT*>(lParam);
1915 uint message = static_cast <uint>(wParam);
2016
21- // 调用回调,如果返回TRUE表示已处理,停止传递
2217 if (callback && callback (message, pKeyboardStruct))
2318 {
24- return 1 ; // 阻止消息传递
19+ return 1 ;
2520 }
2621 }
2722
28- // 继续传递消息
2923 return CallNextHookEx (g_keyboardHook, nCode, wParam, lParam);
3024}
3125
@@ -36,17 +30,14 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Attach(intptr_t callba
3630 return E_INVALIDARG;
3731 }
3832
39- // 如果已经安装了钩子,先移除
4033 if (g_keyboardHook != nullptr )
4134 {
4235 UnhookWindowsHookEx (g_keyboardHook);
4336 g_keyboardHook = nullptr ;
4437 }
4538
46- // 保存回调函数
4739 g_callback = reinterpret_cast <void *>(callback);
4840
49- // 安装低级键盘钩子
5041 g_keyboardHook = SetWindowsHookExW (
5142 WH_KEYBOARD_LL,
5243 LowLevelKeyboardProc,
@@ -66,7 +57,6 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Attach(intptr_t callba
6657
6758HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Detach (intptr_t callback) noexcept
6859{
69- // 验证回调函数是否匹配
7060 if (reinterpret_cast <void *>(callback) != g_callback)
7161 {
7262 return E_INVALIDARG;
@@ -80,6 +70,5 @@ HRESULT __stdcall HutaoNativeInputLowLevelKeyboardSource::Detach(intptr_t callba
8070 return S_OK;
8171 }
8272
83- // 如果没有钩子,返回成功(已经处于分离状态)
8473 return S_OK;
8574}
0 commit comments