gpt4 book ai didi

c# - 使用 Windows 键盘 Hook 时,在键盘状态下错误检测到 SHIFT 键

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:57 25 4
gpt4 key购买 nike

我正在使用磁卡读卡器。

当插入 USB 端口并打开记事本时,我得到以下正确结果:

%B4290071074381429^NAZARKO/C M               ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?

当我使用调用 Windows API 函数的键盘钩子(Hook)(用 C# 编写)时,我得到不一致的结果,例如:

%B42()071074381429^NAZARKO/C M               ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?

如您所见,这里的问题是第一个“90”变成了“()”,就好像在按下“9”和“0”键时按下了 SHIFT。

键盘钩子(Hook)代码来自这里(Keyboard.cs): https://nappybar.googlecode.com/svn/Keyboard.cs它的设置方式如下:

            _kbHook = new KeyboardHook();
_kbHook.KeyIntercepted += KeyboardHook_KeyIntercepted;
_kbHook.SetParameters(KeyboardHook.Parameters.AllowAltTab);
_kbHook.SetParameters(KeyboardHook.Parameters.PassAllKeysToNextApp);

如上所述,我在使用读卡器时得到的结果是不一致的。似乎来自(GetKeyboardState)的键盘状态并不完全正确。主要是,它有时会说在不应该按下 SHIFT 时按下了 SHIFT,反之亦然。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms646299(v=vs.85).aspx

有谁知道为什么会发生这种情况以及为什么它在记事本中可以正常工作?更重要的是,我该如何修复/解决它?谢谢。

最佳答案

您正在使用线程内运行的低级键盘 Hook 。因此,当您调用 GetKeyboardState 时,您获得的是您自己本地键盘的状态,而不是记事本键盘的状态。如果您想继续沿着这条路线前进,您需要手动跟踪 shift 键状态。为什么不在您的应用程序中处理正常的键盘消息?为什么需要全局钩子(Hook)?如果您正常处理它们,则将发生 shift 键处理,并且当您调用 GetKeyboardState 时,您将看到相应的键状态。众所周知,将原始键盘事件转换为键入的字符非常困难。除了 shift 键状态之外,您还必须担心 Caps Lock 和 IME。

关于c# - 使用 Windows 键盘 Hook 时,在键盘状态下错误检测到 SHIFT 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11829582/

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