磁気カードリーダーを使用しています。
USBポートに接続してメモ帳を開くと、次の正しい結果が得られます。
%B4290071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
Windows API関数を呼び出すキーボードフック(C#で記述)を使用すると、次のような一貫性のない結果が得られます。
%B42()071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
ご覧のとおり、ここでの問題は、「9」キーと「0」キーが押されたときにSHIFTが押されたかのように、最初の「90」が「()」になることです。
キーボードフックコードはここ(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
なぜこれが起こっているのか、そしてなぜそれがメモ帳で正しく機能しているのか誰かが知っていますか?そしてもっと重要なことに、どうすればそれを修正/回避できますか?ありがとうございました。