Sto usando Delphi e sto provando a leggere da uno scanner di codici a barre tramite USB, in modo che sia solo un altro dispositivo di interfaccia umana.Pulsante tastiera di Windows che riporta tutto due volte
Ottengo correttamente le cifre, ma ottengo due volte ciascuna. Immagino che questa sia la chiave giù e la chiave.
Potrei; escludilo con una bandiera e ignori la seconda lettura, ma preferirei farlo bene.
Il mio codice è leggermente adattato da this link.
Posso specificare che voglio solo eventi key_up quando si assegna l'hook?
KBHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardHookProc,
HInstance,
GetCurrentThreadId()) ;
o in qualche modo controllare un flag all'interno della funzione di hook stessa?
Aggiornamento: Ho provato a programmare per questo, ma sembra che ho sbagliato. Ecco quello che ho provato all'inizio della mia funzione di hook
// 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;
[ulteriore aggiornamento] Cinque anni dopo, e questo ancora non aiuta, ma trovo che il mio originale follow-up question (q.v) fa.
hai preso questo lavoro? In caso contrario, puoi fornire dettagli sullo scanner? –
+1 scusa, ero fuori per lavoro. Verificherà lunedì. Immagino che abbia a che fare con me anche controllando lo stato della chiave precedente - che probabilmente non è necessario quando si legge da uno scanner di codici a barre. – Mawg
Lolx !! Cinque anni dopo, ho lo stesso problema. Google e trova una domanda che corrisponde perfettamente al mio problema attuale ed è la mia domanda! Grazie, Jim per la risposta. – Mawg