C++ WM_键控混乱

C++ WM_键控混乱,c++,winapi,C++,Winapi,当按下CTRL+S时,我试图让我的应用程序执行某些操作。我只是不确定W和L参数在WM_键下是如何工作的。MSDN有一些关于位字段的东西,我不确定。如何检测CTRL和S? 谢谢 如果hWnd之外的另一个控件有焦点,我该怎么办?嗯,这是一个很大的虚拟键代码列表 CTRL-S将作为2WM\u KEYDOWN消息发送-按下CTRL键(VK\u LCONTROL或VK\u RCONTROL)后是“S”键的0x53消息 不要同时处理这两条消息,而是等待“S”按下键的向下键消息,然后使用神奇值VK_控件调用(

当按下CTRL+S时,我试图让我的应用程序执行某些操作。我只是不确定W和L参数在WM_键下是如何工作的。MSDN有一些关于位字段的东西,我不确定。如何检测CTRL和S? 谢谢

如果hWnd之外的另一个控件有焦点,我该怎么办?

嗯,这是一个很大的虚拟键代码列表

CTRL-S将作为2
WM\u KEYDOWN
消息发送-按下CTRL键(
VK\u LCONTROL
VK\u RCONTROL
)后是“S”键的
0x53
消息

不要同时处理这两条消息,而是等待“S”按下键的向下键消息,然后使用神奇值VK_控件调用(否则需要分别测试左右控制键),以查看是否在按住CTRL键的情况下按下了S

--

显然,键盘消息直接发送到具有焦点的窗口。要使加速器组合在应用范围内工作,您需要在将消息发送到焦点窗口(即在消息泵中)之前检查消息。有关详细信息,请参阅文档


如果要处理系统范围的按键操作,其他答案指向热键api。

当WPARAM等于CTRL-VKcode时,请在对象的状态中设置布尔值。然后,当S出现时,如果是Ctrlbool,您就得到了CTRL-S。

如果他在按S之前离开CTRL键会怎么样?然后您需要处理keyup消息来跟踪它。Chris的回答是正确的方法。我要做的是hWnd之外的另一个控件有焦点?要在应用程序范围内处理ctrl-X组合,您将使用加速器api。系统范围-热键api。