WM_KEYDOWN混乱

时间:2010-04-25 16:59:17

标签: c++ winapi

我正在尝试让我的应用程序在按下CTRL + S时执行某些操作。我只是不确定W和L参数如何为WM_KEYDOWN工作。 MSDN有一些我不确定的位字段。如何检测CTRL和S? 感谢

如果除了hWnd之外的其他控件有焦点,该怎么办?

2 个答案:

答案 0 :(得分:17)

嗯,this是虚拟键码的重要列表。

CTRL-S将作为2条WM_KEYDOWN消息发送 - 按下ctrl键(VK_LCONTROLVK_RCONTROL)后跟0x53消息对于“S”键。

不是处理两个消息,而是等待'S'按下的按键消息,然后使用魔术值VK_CONTROL调用GetKeyState(另外,您需要单独测试左和右控制键)看看是否按下了CTRL按下了S.

-

显然,键盘消息会直接发送到具有焦点的窗口。要使加速器组合在应用程序范围内工作,您需要在将消息分派到焦点窗口之前检查消息 - 即在消息泵中。请参阅TranslateAccelerator的文档。

如果你想处理系统范围的按键,另一个答案指向热键api。

答案 1 :(得分:-2)

当WPARAM等于CTRL VKcode时,则在对象的状态中设置bool。然后,当S出现时,如果是Ctrlbool,你就有了CTRL-S。