gpt4 book ai didi

c++ - Windows Unicode 键盘钩子(Hook)

转载 作者:太空宇宙 更新时间:2023-11-04 14:32:29 25 4
gpt4 key购买 nike

我正在开发一个应用程序,在某些时候需要捕获键盘和鼠标用户输入。我在安装和使用鼠标 Hook 时没有遇到任何问题,但键盘无法正常工作。我需要从多个键盘布局中捕获宽字符。我找到了一些相关但没有解决我的问题:https://stackoverflow.com/questions/15976108/keyboard-hook-not-capturing-unicode-in-other-threads

这就是我没有不必要的东西的东西

WinMain:

//Set the hook, with threadId = 0
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hInstance, 0);
HKL keyboardLayout = GetKeyboardLayout(0);
//All the window and message queue code

键盘处理:

WCHAR unicodeChar;
BYTE keyboardLayout[256];
KBDLLHOOKSTRUCT* keyParam = (KBDLLHOOKSTRUCT*) lParam;

if(code < 0)
return CallNextHookEx(hHook, code, wParam, lParam);

if(wParam == WM_KEYDOWN)
{
GetKeyboardState(keyboardState);

int translation = ToUnicodeEx(keyParam->vkCode, keyParam->scanCode, keyboardState, &unicodeChar, 1, 0, keyboardLayout);
translation = ToUnicodeEx(keyParam->vkCode, keyParam->scanCode, keyboardState, &unicodeChar, 1, 0, keyboardLayout);

if(translation == 0 )//|| translation == -1)
return 0;

PushToBuffer(&unicodeChar);
}

//return CallNextHookEx(hHook, code, wParam, lParam);
return 0;

我留下了注释代码以显示我已经根据我提到的帖子和 MSDN 文档尝试过的内容。推送到缓冲区接收一个 wchar_t 指针并将其存储在用作缓冲区的 wstring 中,该缓冲区转储到 wofstream 中。

发生了什么:

如果我调用 ToUnicodeEx 一次,用户输入将被修改,任何死键都会为他显示两次:例如,在国际英语布局中,您按 ' 然后按 a 打印 á,它显示:'' A。关闭应用程序后,用户输入恢复正常。

如果我调用 ToUnicodeEx 两次,则 dead-key 被消耗,我只是显示字符。

我想知道为什么要修改用户输入,因为我没有更改回调调用者提供的任何参数。低级钩子(Hook)不可能使用 unicode 吗?

最佳答案

关于c++ - Windows Unicode 键盘钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com