C# 捕捉Alt和x2B;其他快捷键
我必须捕捉用户的输入才能发送到我的WPF应用程序的快捷方式。C# 捕捉Alt和x2B;其他快捷键,c#,wpf,shortcut,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.K
我在互联网上发现我必须这样做:
按键时捕捉:
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);
}
其中KeyPressed是一个带有静态布尔变量的类,用于捕获⇧按下Shift、Alt或Ctrl和其他键(使用Alt和Ctrl代替⇧if
子句中的移位)。第二个如果要捕捉与Alt不同的键,⇧按住Shift键并控制快捷方式。例如,对于快捷方式Alt+C,我们有:
按下键。Shift=false李>
按住键。Alt=true李>
按下键。Ctrl=false李>
按键按下。按键=按键
其中最后一个元素的类型为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);
}
在这里,我只是将接收到的输入附加到一个文本字段,然后将所有键设置为false,以正确捕获下一个快捷方式
此代码适用于所有快捷键,如Ctrl+A、Ctrl+Alt+C、,⇧Shift+L,Alt,但当我按下快捷键(如Alt+V)时,它只捕捉Alt,而不捕捉另一个键。
我如何处理
有没有更好的方法处理快捷方式?谢谢。如果是系统密钥(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;
}
}
您可以查看我的答案以了解更多信息。将Alt修饰符状态存储在局部变量中。我不确定为什么,但这让它对我起作用
private bool _altModifierPressed = false;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
_altModifierPressed = (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt));
if (_altModifierPressed && Keyboard.IsKeyDown(Key.V))
{
// code to handle Alt + V
}
}
更新:
或者,您可以这样做(不需要局部变量)
但我注意到,无论使用哪种方法(因为enum具有Flag属性),任何键的组合(包括Alt&V)都可以工作。所以,如果我按下Alt+G+V,这两个都会执行。祝你好运 如果您想在Office VSTO的KeyboardHook中使用[Alt+A]
,这就是它的用法
if (IsKeyDown(Keys.Menu) &&
keyData == Keys.A &&
KeyWasAlreadyPressed == false &&
!IsKeyDown(Keys.Controlkey) &&
!IsKeyDown(Keys.ShiftKey))
{
//Enter your code here
}
注意:
键。菜单表示Alt键
另外,条件显示Alt+A(并且在按下Alt+A之外的control或shift键时不调用)
这对我来说很好更好的方法:,详情请参见。非常感谢,(当然)效果很好:)另一个答案非常有用。
if (IsKeyDown(Keys.Menu) &&
keyData == Keys.A &&
KeyWasAlreadyPressed == false &&
!IsKeyDown(Keys.Controlkey) &&
!IsKeyDown(Keys.ShiftKey))
{
//Enter your code here
}
switch (e.Key)
{
case Key.System:
if ((((System.Windows.Input.KeyboardEventArgs)(e)).KeyboardDevice).Modifiers == ModifierKeys.Alt)
{
if ( e.SystemKey==Key.Left)
{
moiveVideoPsition(-30);
break;
}
if (e.SystemKey == Key.Right)
{
moiveVideoPsition(30);
break;
}
}
break;