In my previous question, ho segnalato che un gancio della tastiera stava segnalando tutto due volte durante la scansione di un codice a barre.Perché la mia tastiera riceve gli stessi eventi di key-up e key-down più volte?
L'ho messo giù per digitare gli eventi chiave & e ho ricevuto un buon consiglio.
Dopo averlo esaminato più da vicino, ho scoperto che ogni cifra viene effettivamente segnalata QUATTRO volte!
Ecco un "debug by print". Qualcuno può suggerire cosa potrei fare di sbagliato? Hai bisogno di maggiori informazioni? I potrebbe ignorare ogni secondo input, ma ... sii! Preferirei capire cosa sta succedendo.
Ecco quello che ho ottenuto per una singola cifra 2
---------
LongParam = 196609 | Word = 50 | 2
LongParam and $80000000 = 0
LongParam and $40000000 = 0
---------
LongParam = 196609 | Word = 50 | 2
LongParam and $80000000 = 0
LongParam and $40000000 = 0
---------
LongParam = -1073545215 | Word = 50 | 2
LongParam and $80000000 = 2147483648
LongParam and $40000000 = 1073741824
---------
LongParam = -1073545215 | Word = 50 | 2
LongParam and $80000000 = 2147483648
LongParam and $40000000 = 1073741824
Aggiornamento: ecco il mio codice
function KeyboardHookProc(Code: Integer; WordParam: Word; LongParam: LongInt): LongInt; stdcall;
begin
if Code < 0 then // http://msdn.microsoft.com/enus/library/windows/desktop/ms644984%28v=vs.85%29.aspx
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
MainForm.Memo1.Lines.Add('---------');
MainForm.Memo1.Lines.Add('LongParam = ' + IntToStr(LongParam) + ' | Word = ' + IntToStr(Ord(WordParam)) + ' | ' + Char(WordParam));
MainForm.Memo1.Lines.Add('LongParam and $80000000 = ' + IntToStr(LongParam and $80000000));
MainForm.Memo1.Lines.Add('LongParam and $40000000 = ' + IntToStr(LongParam and $40000000));
if ((LongParam and $80000000) <> $80000000) (* not key up *)
or ((LongParam and $40000000) <> $40000000) (* key was not previously down *)
then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
if MainForm.ScanningChemical = False then
begin
Result := CallNextHookEx(KBHook, Code, WordParam, LongParam);
Exit;
end;
A questo punto ho un cifre del codice a barre. Ma quelle note sono state aggiunte prima qui.
Prova compreso il codice che si stanno usando per elaborare il gancio della tastiera per aiutarti. – RRUZ
1 codice aggiunto. Cerco di sbarazzarmi della chiave e di elaborare solo la chiave, ma mi sembra di ricevere * due * di ogni – Mawg