我正在尝试让我的应用程序在按下CTRL + S时执行某些操作。我只是不确定W和L参数如何为WM_KEYDOWN工作。 MSDN有一些我不确定的位字段。如何检测CTRL和S? 感谢
如果除了hWnd之外的其他控件有焦点,该怎么办?
答案 0 :(得分:17)
嗯,this是虚拟键码的重要列表。
CTRL-S将作为2条WM_KEYDOWN
消息发送 - 按下ctrl键(VK_LCONTROL
或VK_RCONTROL
)后跟0x53
消息对于“S”键。
不是处理两个消息,而是等待'S'按下的按键消息,然后使用魔术值VK_CONTROL调用GetKeyState(另外,您需要单独测试左和右控制键)看看是否按下了CTRL按下了S.
-
显然,键盘消息会直接发送到具有焦点的窗口。要使加速器组合在应用程序范围内工作,您需要在将消息分派到焦点窗口之前检查消息 - 即在消息泵中。请参阅TranslateAccelerator的文档。
如果你想处理系统范围的按键,另一个答案指向热键api。
答案 1 :(得分:-2)
当WPARAM等于CTRL VKcode时,则在对象的状态中设置bool。然后,当S出现时,如果是Ctrlbool,你就有了CTRL-S。