Trong my previous question, tôi đã báo cáo rằng móc nối bàn phím đã báo cáo mọi thứ hai lần khi quét mã vạch.Tại sao móc khóa bàn phím của tôi nhận được các sự kiện liên tục và nhấn phím nhiều lần?
Tôi đặt xuống để khóa các sự kiện chính & và nhận được lời khuyên tốt.
Sau khi xem xét kỹ hơn, tôi thấy rằng mỗi chữ số thực sự đang được báo cáo BỐN lần!
Đây là bản "gỡ lỗi bằng bản in" thô. Bất cứ ai có thể đề nghị những gì tôi có thể làm sai? Bạn cần thêm thông tin không? Tôi có thể chỉ bỏ qua mọi đầu vào thứ hai, nhưng ... yeuck! Tôi thà hiểu những gì đang xảy ra.
Đây là những gì tôi đã cho một chữ số duy nhất 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
Cập nhật: đây là mã của tôi
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;
Tại thời điểm này tôi có một chữ số mã vạch. Nhưng những dòng ghi nhớ đó đã được thêm vào trước đây.
Hãy thử bao gồm cả mã mà bạn đang sử dụng để xử lý móc nối bàn phím để giúp bạn. – RRUZ
Đã thêm 1 mã. Tôi cố gắng để loại bỏ chìa khóa xuống và chỉ xử lý khóa, nhưng tôi dường như nhận được * hai * của mỗi – Mawg