my previous questionに、キーボードフックがバーコードをスキャンするときに2回すべてを報告していると報告しました。キーボードのフックが同じキーアップとキーダウンのイベントを何度も受け取るのはなぜですか?
私はそれをキーダウンに入れました。&キーイベントと良いアドバイスを受けました。
もっと詳しく見ると、実際に各桁が4回レポートされています。
ここでは、「印刷によるデバッグ」があります。誰かが私が間違っているかもしれないことを提案することはできますかもっと情報が必要ですか?私はちょうどすべての2番目の入力を無視することができますが...うわー!私はむしろ何が起こっているのか理解しています。
は、ここで私は一桁のために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
アップデートを得たものです。ここで私はバーコードの数字を持っている。この時点で私のコード
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;
です。しかし、それらのメモ行はここに追加されました。
てみてくださいでは、このコード
を交換する問題を解決するにはあなたを助けるためにキーボードのフックを処理するために使用しています。 – RRUZ
コードが1つ追加されました。私はキーダウンを取り除き、キーアップのみを処理しようとしますが、それぞれ – Mawg