1. 程式人生 > 實用技巧 >WPF - 註冊全域性快捷鍵

WPF - 註冊全域性快捷鍵

註冊全域性快捷鍵,需要呼叫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()

轉換。如果其他操作都對,就是觸發不了快捷鍵,可能按鍵繫結錯了……