在我的C#WPF项目中,我从系统托盘的后台运行,我安装了一个名为NHotkey的软件包,试图将我的键盘热键转换为全局热键,即使窗口没有打开也能工作:https://github.com/thomaslevesque/NHotkey
我通过XAML添加了它:
<Window.Resources>
<RoutedUICommand x:Key="CtrLeft" Text="Left" />
</Window.Resources>
<Window.InputBindings>
<KeyBinding Gesture="Ctrl+Windows+Alt+Left" Command="{StaticResource CtrLeft}" HotkeyManager.RegisterGlobalHotkey="True" />
</Window.InputBindings>
<Window.CommandBindings>
<CommandBinding Command="{StaticResource CtrLeft}" Executed="Test" />
</Window.CommandBindings>
不幸的是,它仍然只执行";测试";如果窗口打开并聚焦,则函数。
使用NHotkey自述文件,我还尝试以编程方式实现热键,最终得到了相同的结果。NHotkey是一个非常受欢迎的软件包,它似乎没有任何相关的公开问题,所以我怀疑我做错了什么。
我还尝试过其他全局热键包,它们要么导致相同的事情,要么导致应用程序崩溃,并给出有关热键已在事件查看器中注册的错误。在这些情况下,我尝试过任何东西都不会使用的模糊组合键,但在事件查看器中仍然会收到关于它已经注册的错误。HotkeyUtility是我尝试过的一个包的例子:https://github.com/giosali/HotkeyUtility
这些结果是在没有第三方软件的全新测试虚拟机上得出的。在Windows 10和11上都尝试过。
全局热键对我的应用程序非常有用,任何帮助都将不胜感激。有什么想法吗?谢谢
经过一段时间的摸索,我发现以编程方式执行此操作是可行的,您只需要确保在Window_SourceInitialized中使用HotkeyManager.Current.AddOrReplace(...);
注册热键。我最初把它放在主功能中。