Я работаю со считывателем магнитных карт.
При подключении к USB-порту и открытии Блокнота я получаю следующий правильный результат:
%B4290071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
Когда я использую перехватчик клавиатуры (написанный на C#), который вызывает функции Windows API, я получаю противоречивые результаты, например:
%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
Кто-нибудь знает, почему это происходит и почему он работает правильно в Блокноте? И что еще более важно, как я могу это исправить/обойти? Спасибо.