我配置了一些加速器,如果只使用Ctrl
键它可以正常工作,但如果我让它Shift
+Ctrl
它不起作用(甚至不会在 MFC 菜单中显示为Ctrl
版本的快捷方式)。我用大写和小写字母尝试过的条目没有区别。这是加速器中的条目的样子:
"R", ID_R1, VIRTKEY, CONTROL, NOINVERT
"R", ID_R2, VIRTKEY, SHIFT, CONTROL, NOINVERT
我究竟做错了什么?
编辑:我在上面写了“R”大写,因为两个答案都在谈论这个问题,但我最初有“R”,在放弃并在这里询问之前只改为“r”。但是“R”也不适用于 Ctrl-Shift-R,而 Ctrl-R 可以正常工作吗?
编辑:使用 Spy x64 并检查主窗口,永远不要发送命令。如果我转到拆分器窗口右侧的列表视图并按此顺序按 Ctrl-Shift-R,则生成的唯一内容是:
<000041> 00000000002100D6 P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000042> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000043> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000044> 00000000002100D6 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000045> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000046> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000047> 00000000002100D6 P WM_KEYUP nVirtKey:'R' cRepeat:1 ScanCode:13 fExtended:0 fAltDown:0 fRepeat:0 fUp:1
<000048> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000049> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000050> 00000000002100D6 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<000051> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000052> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000053> 00000000002100D6 P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
编辑:
甚至更多数据,我在 thrdcore.cpp 的第 178 行放置了一个条件断点,消息循环所在的位置(行是if (pState->m_msgCur.message != WM_KICKIDLE && !AfxPreTranslateMessage(&(pState->m_msgCur)))
)。断点是:pState->m_msgCur.message==0x0100 && pState->m_msgCur.wParam==0x52
(WM_KEYDOWN for R)。当按下R
或Ctrl-R
断点命中时,按下Ctrl-Shift-R
断点时不会发生。在间谍跟踪之上,R 从来没有 WM_KEYDOWN,只有一个向上?
编辑:
现在真的越来越奇怪了。我决定进入 VS2017 的键盘设置,看看是否有分配给 Ctrl-Shift-R 的东西,我按下它并没有任何反应,我尝试任何其他字母,如 Ctrl-Shift-T,它工作正常。可以通过我的键盘吗?或者当按下 Ctrl-Shift 时,Win10 x64 中更深层次的东西正在为 R 吃掉 WM_KEYDOWN?
谢谢。