WPF - 註冊全域性快捷鍵
阿新 • • 發佈:2020-09-11
註冊全域性快捷鍵,需要呼叫win32API,user32.dll
中註冊快捷鍵,和kernel32.dll
中設定原子量,原子量用於保證註冊的快捷鍵不會出現重複id
主要參考 https://www.cnblogs.com/leolion/p/4693514.html https://github.com/JinToliq/HotkeyGlobalWPF
呼叫win32api的方法在參考的文章裡面已經很清楚了,不再贅述,主要說一下遇到的坑
有兩種有效的掛接事件監聽的方法
方法1:
// 獲取窗體控制代碼 m_Hwnd = new WindowInteropHelper(this).Handle; HwndSource hWndSource = HwndSource.FromHwnd(m_Hwnd); // 新增處理程式 if (hWndSource != null) hWndSource.AddHook(WndProc);
方法2:
WindowHandle = handle;
ComponentDispatcher.ThreadPreprocessMessage += new ThreadMessageEventHandler(ComponentDispatcher_ThreadPreprocessMessage);
第二種函式是第一種的封裝,沒什麼具體的區別
System.Input.Key和Win32API使用的引數不同
因為不熟,遇到一個很坑的地方。RegisterHotKey()
的引數vk (VirtualKey)
是虛擬按鍵,如果使用System.Input.Key
, 需要用KeyInterop.VirtualKeyFromKey()