WM_KEYDOWN混乱

jma*_*erx 7 c++ winapi

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

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

Chr*_*cke 17

嗯,是虚拟键码的大清单.

CTRL-S将作为2条WM_KEYDOWN消息发送 - 当按下ctrl键(VK_LCONTROLVK_RCONTROL)后面跟一条0x53"S"键时的消息.

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

-

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

如果要处理系统范围的按键,则另一个答案指向热键api.