我正在使用磁卡读卡器。
当插入 USB 端口并打开记事本时,我得到以下正确结果:
%B4290071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
当我使用调用 Windows API 函数的键盘挂钩(用 C# 编写)时,我得到不一致的结果,例如:
%B42()071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
如您所见,这里的问题是第一个 '90' 变成了 '()',就好像在按下 '9' 和 '0' 键时按下了 SHIFT。
键盘钩子代码来自这里(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 在不应该按下时按下,反之亦然。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms646299(v=vs.85).aspx
有谁知道为什么会发生这种情况以及为什么它在记事本中正常工作?更重要的是,我如何修复/解决它?谢谢你。