我必须捕捉用户的输入才能将快捷方式发送到我的 WPF 应用程序。
我在互联网上发现我必须做这样的事情:
按下一个键时捕捉:
void keyDown(object sender, KeyEventArgs e) {
if ((Keyboard.Modifiers & Modifiers.Shift) == Modifiers.Shift)
{
KeyPressed.SetShift(true);
}
if ( Key.Shift != e.Key && Key.LeftAlt != e.Key && ....)
{
KeyPressed.SetKey(e.Key);
}
Run Code Online (Sandbox Code Playgroud)
其中 KeyPressed 是一个带有静态布尔变量的类,用于捕获 if ?Shift, AltorCtrl和另一个键被按下(在子句中使用AltandCtrl而不是)。第二个是捕捉一个不同于, , Control 的键作为快捷键。例如,对于快捷方式+我们有:?ShiftififAlt?ShiftAltC
其中最后一个元素的类型为System.Window.Input.Key。
当一个键被释放时捕捉:
void keyUp(object sender, KeyEventArgs e) {
if(KeyPressed.getShift())
this.textField.Text += "+Shift";
if(KeyPressed.getKeyCode())
this.textField.Text += "+" + KeyPressed.k.toString();
KeyPressed.SetShift(false);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我简单地将接收到的输入附加到 textField,之后我将所有键设置为 false 以正确捕获下一个快捷方式。
此代码适用于Ctrl+ A、Ctrl+ Alt+ C、?Shift+ L、等所有快捷方式Alt,但是当我按下 Alt+ 等快捷方式时V,它只会捕获 Alt,而不是其他键。
我该如何管理?
有没有办法以更好的方式处理快捷方式?谢谢你。
在 SystemKey(Alt等)的情况下,您需要获取实际密钥,您可以使用此辅助函数获取系统密钥背后的真实密钥。
public static Key RealKey(this KeyEventArgs e)
{
switch (e.Key)
{
case Key.System:
return e.SystemKey;
case Key.ImeProcessed:
return e.ImeProcessedKey;
case Key.DeadCharProcessed:
return e.DeadCharProcessedKey;
default:
return e.Key;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看我的答案以获取更多信息。