在这里阅读:Windows PC 上如何实现键盘自动重复? https://stackoverflow.com/questions/876852/how-is-keyboard-auto-repeat-implemented-on-a-windows-pc?answertab=votes#tab-top
我知道低级键盘挂钩不会接收自动重复计数:/
请注意,低级键盘挂钩(WH_KEYBOARD_LL)不
接收重复计数。
但为什么?? o.O
我使用 Windows 消息提取自动重复计数的方式:
int repeatCount = (lParam & KF_REPEAT);
但当我使用时由于某种原因它不起作用SetWindowsHookEx
挂钩WH_KEYBOARD_LL
.
我想过滤自动重复Space
使用全局挂钩时的 key。有办法做到这一点吗?可能是一种创造性的方法来确定按下按键是否自动重复(即按住)?
示例代码:
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
{
KBDLLHOOKSTRUCT kbd = *(KBDLLHOOKSTRUCT *)(lParam);
if (kbd.vkCode == VK_SPACE && !(lParam & KF_REPEAT))
{
// do something
}
}
我知道低级键盘挂钩不会接收自动重复计数......但为什么?
因为自动重复计数器只是不存在处于低水平。在该级别,您可以从键盘本身获取事件。按下键,向上键,就是这样。键盘不受计数器控制。
At 更高层次,当系统处理来自键盘的这些低级事件并生成要分发给应用程序的按键消息时,系统会运行自己的计时器来管理重复计数器,并在计数器增加时创建相应的按键消息。
我想过滤自动重复Space
使用全局挂钩时的 key。有办法做到这一点吗?
In a 低级挂钩,您将必须运行自己的计时器,就像系统一样。
否则,请使用更高层次消息钩子而不是键盘钩子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)