-3

菜鸟问题在这里,但我找不到任何其他回答它的线程。我只想知道如何使用 WM_KEYDOWN 消息,然后继续使用它的 wParam 参数来检查按下了哪个键。像很多人一样,我正在使用它来尝试让 Windows 停止按键重复延迟。

我可以让我的程序响应 WM_KEYDOWN

if (WM_KEYDOWN)
    //do something

但我不知道如何访问 wParam 参数。编码

if (WM_KEYDOWN)
    if (wParam == 'A')
        //do something

似乎不起作用。

这种代码超出了我的深度,但人们说这是解决键重复延迟的最简单方法。我真的不明白什么是消息或它如何具有参数。

4

2 回答 2

0

正如您可能打算写的评论中指出的那样

if( message == WM_KEYDOWN )

自从

if( WM_KEYDOWN )

将永远是真的,因为它是一个常数。

至于 wparam 检查我是否记得正确,您需要将其与小写字符而不是大写字符进行比较。

于 2013-10-13T16:49:35.793 回答
0

这是一个非常古老的问题,因为 MSDN 发生了一些变化,但是我将尝试涵盖多个场景。

方案 A

您在不使用SetwindowsHookEx的情况下通过 Windows 过程捕获消息回调。示例:您正在WNDPROC中捕获消息。首先,您需要检测消息类型,如(msg == WM_KEYDOWN). msg包含触发调用的事件。这样您就可以利用wParam虚拟键代码的位置。

方案 B

您正在通过低级键盘过程 ( WH_KEYBOARD_LL ) 捕获消息回调。在这种情况下wParam,充当msgfrom Scenario A,并lParam包含附加信息。您需要映射lParamKBDLLHOOKSTRUCT并从中提取虚拟键代码。 KBDLLHOOKSTRUCT kbStruct = *((KBDLLHOOKSTRUCT*)lParam); 您现在可以使用 访问虚拟键代码kbStruct.vkCode

方案 C

您正在通过键盘过程 ( WH_KEYBOARD ) 捕获消息回调。在这种情况下wParam,包含您的虚拟键代码,lParam 包含标志。有关标志的更多信息,请参阅 MSDN。为了检测 Key Down/Up 和/或按住按钮,您必须依赖第 31 位和第 30 位(lParam>>31lParam&0x40000000)上的标志。

于 2021-01-28T03:10:14.660 回答