捕捉 Alt + 其他快捷键

A. *_*olf 3 c# wpf shortcut

我必须捕捉用户的输入才能将快捷方式发送到我的 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

  1. KeyPressed.Shift = false;
  2. KeyPressed.Alt = true;
  3. KeyPressed.Ctrl = false;
  4. KeyPressed.key = 键;

其中最后一个元素的类型为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+ ACtrl+ Alt+ C?Shift+ L、等所有快捷方式Alt但是当我按下 Alt+ 等快捷方式时V,它只会捕获 Alt,而不是其他键。
我该如何管理?
有没有办法以更好的方式处理快捷方式?谢谢你。

Jan*_*nen 6

在 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)

您可以在此处查看我的答案以获取更多信息。