Używam Delphi i próbuję czytać ze skanera kodów kreskowych przez USB, tak, że jest to po prostu kolejny Human Interface Device.Windowsowy hak klawiatury zgłasza wszystko dwa razy
Dostaję poprawnie cyfry, ale otrzymam je dwa razy. Wyobrażam sobie, że to jest klucz i klucz.
Mogłem; kludge to z flagą i zignorować bardzo drugi raz, ale wolałby zrobić to propery.
Mój kod został nieznacznie zmieniony z this link.
Czy mogę określić, że chcę tylko zdarzenia key_up podczas przypisywania haka?
KBHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardHookProc,
HInstance,
GetCurrentThreadId()) ;
lub w jakiś sposób sprawdzić flagę w ramach samej funkcji haka?
Aktualizacja: próbowałem kodować, ale wygląda na to, że źle się spisałem. Oto, co starałem się na początku mojej funkcji haka
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx
if Code < 0 then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
if (((LongParam and $80000000) <> $80000000) (* key is not being released *)
and ((LongParam and $40000000) <> $40000000)) (* key was not previously down *) then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
[Update] Dalsze Pięć lat później, i to nie pomoże, ale uważam, że mój oryginalny follow-up question (q.v) robi.
Dostałeś tę pracę? Jeśli nie, czy możesz podać szczegóły dotyczące skanera? –
+1 Przepraszam, byłem w interesach. Sprawdzę w poniedziałek. Myślę, że ma to związek ze sprawą również sprawdzenia poprzedniego stanu klucza - co prawdopodobnie nie jest konieczne podczas odczytu ze skanera kodów kreskowych. – Mawg
Lolx !! Pięć lat później mam ten sam problem. Google i znajdź pytanie, które idealnie pasuje do mojego obecnego problemu - i to jest moje pytanie! Dzięki, Jim za odpowiedź. – Mawg