[英]Using WM_KEYDOWN and wParam
菜鸟问题在这里,但我找不到任何其他线程来回答它。 我只想知道如何使用 WM_KEYDOWN 消息,然后继续使用其 wParam 参数来检查按下了哪个键。 像很多人一样,我正在使用它来尝试让 Windows 停止按键重复延迟。
我可以让我的程序响应 WM_KEYDOWN
if (WM_KEYDOWN)
//do something
但我不知道如何访问 wParam 参数。 代码
if (WM_KEYDOWN)
if (wParam == 'A')
//do something
似乎不起作用。
这种代码超出了我的理解,但人们说这是解决关键重复延迟的最简单方法。 我真的不明白消息是什么或者它如何可以有一个参数。
正如您可能打算写的评论中指出的那样
if( message == WM_KEYDOWN )
因为
if( WM_KEYDOWN )
将永远为真,因为它是一个常数。
至于 wparam 检查,如果我没记错的话,您需要将它与小写字符而不是大写字符进行比较。
这是一个非常古老的问题,因为 MSDN 有一些变化,但是我将尝试涵盖多种情况。
您在不使用SetwindowsHookEx 的情况下通过 Windows 过程捕获消息回调。 示例:您正在WNDPROC 中捕获消息。 首先,您需要检测(msg == WM_KEYDOWN)
的消息类型。 msg
包含触发调用的事件。 通过这种方式,您可以使用wParam
,它将作为虚拟密钥代码。
您正在通过低级键盘程序 ( WH_KEYBOARD_LL ) 捕获消息回调。 在这个场景中, wParam
充当Scenario A
msg
,而lParam
包含附加信息。 您需要将lParam
映射到KBDLLHOOKSTRUCT并从中提取虚拟密钥代码。 KBDLLHOOKSTRUCT kbStruct = *((KBDLLHOOKSTRUCT*)lParam);
您现在可以使用kbStruct.vkCode
访问虚拟密钥代码。
您正在通过键盘过程 ( WH_KEYBOARD ) 捕获消息回调。 在这种情况下, wParam
包含您的虚拟密钥代码,lParam 包含标志。 有关标志的更多信息,请参阅 MSDN。 为了检测按键按下/按下和/或按住按钮,您必须依赖第 31 位和第 30 位( lParam>>31
和lParam&0x40000000
)上的标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.