在my previous question中,我报告说,扫描条形码时,键盘钩子报告了所有内容。为什么我的键盘挂钩多次接收到相同的键盘键和键盘键事件?
我把它放下来,关键事件&,并收到了很好的建议。
仔细看了看,我发现每个数字实际上都是报告四次!
这里是一个粗略的“打印调试”。任何人都可以建议我可能做错了什么?你需要更多信息吗?我可能只是忽略每一秒的输入,但... yeuck!我宁愿明白发生了什么。
这就是我得到了一个数字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 2012-03-26 02:47:46
已添加1个代码。我试图摆脱关键并只处理关键,但我似乎收到每个 – Mawg 2012-03-26 03:18:24