자기 카드 판독기로 작업하고 있습니다.Windows 키보드 후크를 사용할 때 키보드 상태에서 SHIFT 키가 잘못 감지되었습니다
USB 포트 및 열기 메모장에 연결하면, 다음과 같은 올바른 결과를 얻을 : Windows API 함수를 호출
%B4290071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
내가 키보드 후크를 사용하는 경우 (C#으로 작성된이) 내가 할을 일관성없는 결과 예를 들면 : 당신이 볼 수 있듯이 '9'와이 '0'키를 누르 때 SHIFT를 누르면 것처럼
%B42()071074381429^NAZARKO/C M ^1302101000002024976000000000002?;4290071074381429=13021010000020204976?
, 여기에 문제는 '()'최초의 '90'이 될 것입니다. https://nappybar.googlecode.com/svn/Keyboard.cs 그것은 다음과 같은 방법으로 설정 :
키보드 후크 코드 (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
왜 이런 일이 일어나는 지, 왜 그것이 메모장에서 올바르게 작동하는지 알 수 있습니까? 더 중요한 것은 어떻게 해결할 수 있습니까? 고맙습니다.
답변 해 주셔서 감사합니다. 응용 프로그램은 여러 응용 프로그램이있는 키오스크로 실행되며 모든 키 누름 (또는 판독기 입력)을 감지하므로 후크를 감지합니다. SHIFT 수동 감지로 문제가 해결 된 것 같습니다. – user1579177
운 좋은 당신을 위해 키보드를 제어하고 그것이 영어 - 보장 할 수있는 키오스크입니다. 다른 언어의 쉬프트 상태는 훨씬 더 어렵습니다. (미국 영어에서도 Caps Lock, Ctrl, Alt 및 Num Lock에 대해 걱정할 필요가 있습니다.) –
GetAsyncKeyState를 사용하면됩니다. 어떤 창이 활성인지에 관계없이 수정 자 키 (shift, control, alt) 값을 올바르게 검색합니다. GetKeyboardState가 스레딩 문제로이를 검색하지 못합니다. 반면에 GetAsyncKeyState는 키의 물리적 속성을 가져 오므로 Caps, Num 및 Scroll의 토글 상태를 반환하지 않습니다. GetAsyncKeyState (바이트 배열 채우기)로 모든 키를 반복 한 후 대문자, 스크롤 및 num lock에 대해 GetKeyState를 호출하고 토글 비트 (최하위 비트)를 확인하고 주 배열의 값을 덮어 씁니다. – Triynko