Noob在这里提问,但我找不到任何其他线程来回答它。我想知道的是如何使用WM_KEYDOWN消息,然后继续使用其wParam参数来检查已按下哪个键。像很多人一样,我正在使用它来尝试让窗口停止,重复延迟。
我可以让我的程序用
响应WM_KEYDOWNif (WM_KEYDOWN)
//do something
但我无法弄清楚如何访问wParam参数。代码
if (WM_KEYDOWN)
if (wParam == 'A')
//do something
似乎不起作用。
这种代码远非我的深度,但人们说这是解决密钥重复延迟的最简单方法,所以请光临我。我真的不明白消息是什么或它如何有参数。
答案 0 :(得分:0)
正如评论中指出的那样,你可能想写一下
if( message == WM_KEYDOWN )
因为
if( WM_KEYDOWN )
永远是真的,因为它是常数。
至于wparam检查我是否正确回忆你需要将它与小写字符比较而不是大写字符。
答案 1 :(得分:0)
这是一个非常古老的问题,因为 MSDN 有一些变化,但是我会尝试涵盖多个场景。
您正在通过 Windows 过程捕获消息回调,而不使用 SetwindowsHookEx。示例:您正在 WNDPROC 中捕获消息。
首先,您需要检测 (msg == WM_KEYDOWN)
中的消息类型。 msg
包含触发调用的事件。这样您就可以使用 wParam
作为虚拟钥匙代码。
您正在通过低级键盘过程 (WH_KEYBOARD_LL) 捕获消息回调。在这种情况下,wParam
充当 msg
中的 Scenario A
,而 lParam
包含附加信息。您需要将 lParam
映射到 KBDLLHOOKSTRUCT 并从中提取虚拟密钥代码。
KBDLLHOOKSTRUCT kbStruct = *((KBDLLHOOKSTRUCT*)lParam);
您现在可以使用 kbStruct.vkCode
访问虚拟钥匙代码。
您正在通过键盘过程 (WH_KEYBOARD) 捕获消息回调。在这种情况下,wParam
包含您的虚拟密钥代码,而 lParam 包含标志。有关标志的更多信息,请参阅 MSDN。为了检测按键按下/按下和/或按住按钮,您必须依赖第 31 位和第 30 位(lParam>>31
和 lParam&0x40000000
)上的标志。