该应用程序使用一个包NHotkey.Wpf来分配全局热键。
有一个带有public static void Enable()添加预定义热键的方法的静态类。
问题:如果用户已经注册了这样的密钥,该方法将返回错误, NHotkey.Wpf.HotkeyAlreadyRegistered.
在普通的非静态类中,我只需订阅事件并将其作为错误文本重定向到控制台。
NHotkey.Wpf.HotkeyManager.HotkeyAlreadyRegistered += (sender, e) => { Console.WriteLine("This Hotkey already registered!"); };
在静态类中订阅此事件的位置 - 我不明白,因为 没有类构造函数。将此行添加到方法的开头Enable()也没有任何作用。
public App我还尝试直接在文件的构造函数中订阅事件App.xaml.cs,但这也无济于事。
不确定通过排除每个热键是否正确try-except。
编码:
static class Test
{
public static void Enable()
{
NHotkey.Wpf.HotkeyManager.HotkeyAlreadyRegistered += HotkeyManager_HotkeyAlreadyRegistered;
NHotkey.Wpf.HotkeyManager.Current.AddOrReplace("hotkey1", Key.Q, ModifierKeys.Control, (sender, e) => { Console.WriteLine("hotkey1"); });
NHotkey.Wpf.HotkeyManager.Current.AddOrReplace("hotkey2", Key.W, ModifierKeys.Control, (sender, e) => { Console.WriteLine("hotkey2"); });
NHotkey.Wpf.HotkeyManager.Current.AddOrReplace("hotkey3", Key.E, ModifierKeys.Control, (sender, e) => { Console.WriteLine("hotkey3"); });
. . .
// таких клавиш около 10 и прописывать try-catch для каждой кажется мне неуместным
}
private static void HotkeyManager_HotkeyAlreadyRegistered(object sender, NHotkey.Wpf.HotkeyAlreadyRegisteredEventArgs e)
{
Console.WriteLine("Клавиша уже зарегистрирована");
}
}
它不能通过处理程序工作,根据我在源代码中看到的判断,事件处理程序
HotkeyAlreadyRegistered仅适用于AddKeyBinding.该字段
Name通常传递给异常HotkeyAlreadyRegisteredException。为了不重复出现异常的代码,可以做一个集合和一个循环。