键盘钩子问题

键盘钩子问题,第1张

你所谓的一次很多情况下并非真的是只有一次。

你按下键盘后必定有一个极端的停滞时间,如果这段时间超过了计算机对键盘的响应时间,那计算机就很有可能读取多次键盘事件

正确的方法是当计算机读取到第一次键盘事件后,将这个键记录下来,如果接下来瞬间又读取了同一个键盘事件的话程序“不响应”。

更普遍的处理是再设置一个计时器,作用是若在一定时间内都发生了同一键盘事件,那么说明用户一直按住了某个键,于是程序解除“不响应”,从而变为响应所有键盘事件。

WH_KEYBOARD 对于全局的效果不好用, 换用 WH_KEYBOARD_LL 钩子吧。

示例代码:

//全局键盘钩子消息处理函数

function KeyHookProc(nCode:Integer; wP:WPARAM; lP:LPARAM):LRESULT; stdcall;

var

pEvt: TEventMsg;

vKey: Cardinal;

begin

if (nCode = HC_ACTION) then begin

vKey := 0;

case wP of

WM_SYSKEYDOWN, WM_KEYDOWN:

begin

pEvt := PEventMsg(LP)^;

vKey := LOBYTE(pEvtmessage);

case vKey of

end;

end;

end;

WM_SYSKEYUP, WM_KEYUP:;

end;

end;

result := CallNextHookEx(hKeyHook, nCode, wP, lP);

end;

安装钩子:

hKeyHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyHookProc, hInstance, 0);

I:设置钩子 设置钩子是通过SetWindowsHookEx ()的API函数 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) idhook:装入钩子的类型 lpfn: 钩子进程的入口地址 hMod:

以上就是关于键盘钩子问题全部的内容,包括:键盘钩子问题、delphi 键盘全局钩子、qt中怎么使用键盘钩子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9472069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存