Maw*_*awg 5 delphi hook winapi
我正在使用Delphi并尝试通过USB读取条形码扫描器,因此它只是另一个人机接口设备.
我正确地得到了数字,但每次都得到两次.我想这是关键和关键.
我可以; 用旗帜扯掉它并忽略第二次阅读,但宁愿做它.
我的代码稍微适应了这个链接.
我可以指定在分配挂钩时只需要key_up事件吗?
KBHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardHookProc,
HInstance,
GetCurrentThreadId()) ;
Run Code Online (Sandbox Code Playgroud)
或以某种方式检查钩子函数本身内的标志?
更新:我试图为它编码,但看起来我错了.这是我在钩子函数开始时尝试的内容
// 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;
Run Code Online (Sandbox Code Playgroud)
[进一步更新]五年后,这仍然没有帮助,但我发现我原来的后续问题(qv)确实如此.
Jim*_*des 16
在KeyboardHookProc中,您需要检查LongParam参数的高位.如果高位为零,则按键.如果高位为1,则为关键释放.
例如:
KeyUp:boolean;
KeyUp := ((LongParam and (1 shl 31)) <> 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |