我在我的应用程序中覆盖了ProcessCmdKey,并且可以使用修饰符获得任何单个按键(例如,Alt + Ctrl + X)。我想要做的是模仿说ReSharper的快捷处理,用户按住控制键,然后R,M打开重构对话框
我发现有很多参考资料可以捕获关键加上修饰符组合,但序列不多。有这个Capture multiple key downs in C#,但它使用KeyDown事件。
还有一些关键挖掘示例,例如此http://www.codeproject.com/KB/system/simple_key_log.aspx,它捕获所有内容并使用本机调用。
我可以扩展我的ProcessCmdKey来处理键序列还是我需要查看其他地方?由于我在ProcessCmdKey中捕获了大量快捷方式,因此我宁愿不必再次启动
由于
答案 0 :(得分:3)
为了实现您想要的功能,您只需跟踪KeyPress
事件的顺序。
您可以创建一个类来跟踪ProcessCmdKey
中按下的最后一个组合键。如果该特定组合与映射命令不匹配,但它是序列的第一个元素,则可以将其存储在类中。然后,下次激活ProcessCmdKey
时,请检查新的KeyPressTracker
类以确定序列是否已启动。如果有,则检查新按下的组合键是否是您指定的组合的第二个元素。请参阅下面的伪代码示例:
第1步: ProcessCmdKey
已激活。键组合是 Ctrl + R ,这与您要处理的命令不匹配,但它是您要使用的序列的第一个元素( Ctrl + R + M < / KBD>)。
第2步:将此按键存储在您创建的新课程中,以跟踪上次按键操作。
KeyPressTracker.Store(KeyCode, Modifiers);
第3步: ProcessCmdKey
第二次激活。这次,组合键是 Ctrl + M ,这不是我们正在寻找的按键,而是序列的第二个元素。我们使用新的KeyPressTracker
类检查上次存储的按键。这将允许您匹配“序列”,例如 Ctrl + R 和 Ctrl + M 。
var lastKeyPress = KeyPressTracker.GetLastKeyPress();
if (lastKeyPress == "Ctrl+R" && currentKeyPress == "Ctrl+M")
{
// Show Refactor dialog
}