C# 在整个应用程序中捕获按键
是否有可能捕获(我猜是在app.xaml.cs中的某个地方)任何键,以及它是否按下了open window 谢谢你的帮助 是和否 焦点在处理给定键的顺序中起作用。捕获初始按键的控件可以选择不传递按键,这将禁止您在最顶层捕获按键。此外,.NET framework中还有一些控件在某些场景下吞下某些键,但是我无法调用特定实例 如果您的应用程序很小,并且深度只不过是一个带有按钮的窗口,那么这当然是可以实现的,并且将遵循在WPF应用程序中捕获关键笔划的标准方法C# 在整个应用程序中捕获按键,c#,wpf,keypress,C#,Wpf,Keypress,是否有可能捕获(我猜是在app.xaml.cs中的某个地方)任何键,以及它是否按下了open window 谢谢你的帮助 是和否 焦点在处理给定键的顺序中起作用。捕获初始按键的控件可以选择不传递按键,这将禁止您在最顶层捕获按键。此外,.NET framework中还有一些控件在某些场景下吞下某些键,但是我无法调用特定实例 如果您的应用程序很小,并且深度只不过是一个带有按钮的窗口,那么这当然是可以实现的,并且将遵循在WPF应用程序中捕获关键笔划的标准方法 protected override vo
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
myVariable = true;
if (ctrl && e.Key == Key.S)
base.OnKeyDown(e);
}
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl)
myVariable = false;
base.OnKeyUp(e);
}
如果您的应用程序很大,您可以尝试使用此处详述的方法,但请理解上述警告仍然存在。您可以使用类似于注册全局挂钩的方法。当应用程序运行时,只要按下给定的键,它就会触发。您可以在
应用程序中使用它,如下所示:
public partial class App
{
private HotKey _hotKey;
protected override void OnActivated(EventArgs e)
{
base.OnActivated(e);
RegisterHotKeys();
}
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
UnregisterHotKeys();
}
private void RegisterHotKeys()
{
if (_hotKey != null) return;
_hotKey = new HotKey(ModifierKeys.Control | ModifierKeys.Shift, Key.V, Current.MainWindow);
_hotKey.HotKeyPressed += OnHotKeyPressed;
}
private void UnregisterHotKeys()
{
if (_hotKey == null) return;
_hotKey.HotKeyPressed -= OnHotKeyPressed;
_hotKey.Dispose();
}
private void OnHotKeyPressed(HotKey hotKey)
{
// Do whatever you want to do here
}
}
有更好的办法。在MS论坛上找到。工作起来很有魅力
将此代码放入应用程序启动:
EventManager.RegisterClassHandler(typeof(Window),
Keyboard.KeyUpEvent,new KeyEventHandler(keyUp), true);
private void keyUp(object sender, KeyEventArgs e)
{
//Your code...
}
如果(ky.Key==Key.Up | ky.Key==Key.Down | ky.Key==Key.Right | ky.Key==Key.Left | ky.Key==Key.Add | ky.Key==Key.Subtract | ky.Key==Key.PageUp | ky.Key==Key.PageDown)
?请提供更多信息!在web/stackoverflow中搜索ProcessCmdKey,在WndProc中搜索WPF。在low level中,应该可以在顶级表单中重写该方法,该表单将接收所有消息并处理您的按键。示例和我尝试使用此示例,但调试时出错:App.OnStartup(object,System.Windows.StartupEventArgs)':找不到合适的方法覆盖选中修改后的答案感谢快速响应。不幸的是,我不知道为什么,但这对我不起作用。我把所有的代码(包括link中的类)都放进去了,但从来没有进入“keyPress”Ok-works。但是正如我在第一篇文章中所说,我有很多窗户。实际上,它只在first(loginWindow)上工作。有没有可能,在所有窗口中都使用它,而不在其中添加方法?好的,我想我明白了。我在我的登录窗口中使用RegisterHotKeys作为方法。当用户丢失时,我正在创建这个类的对象,感谢我在每个窗口中访问它。非常感谢您的帮助!:)