2012-08-01 61 views
16

我有一個簡單的WPF應用程序,我需要捕獲在Windows(操作系統)中按F1鍵,即使我的WPF窗口最小化,或者它未被激活。全球Windows鍵按

我檢測到這個問題。我在互聯網上搜索,我發現很多結果,但他們沒有幫助我。

爲了檢測應用程序內部按下一個鍵我用這個簡單的代碼:

AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)KeyPressed); 
private void KeyPressed(object sender, KeyEventArgs e) 
{ 
     if (e.Key == Key.F1) 
     { 
      //my code went here 
     } 
} 

但如果沒有激活我的窗前,這是行不通的。

那麼,我的問題是:如何檢測全局按鍵?

我再說一遍:這是一個WPF應用程序。

回答

21

不需要Keyboard Hooking。只需使用RegisterHotKey(定義系統範圍的熱鍵)和UnregisterHotKey從Windows API。嘗試在C#中使用這些從pinvoke.net或這些教程:

有在Microsoft Forums樣本。

您可以使用這些改性劑和Virtual-Key Codes

 
MOD_ALT  (0x0001) 
MOD_CONTROL (0x0002) 
MOD_NOREPEAT (0x4000) 
MOD_SHIFT (0x0004) 
MOD_WIN  (0x0008)

例如F1鍵是VK_F1 (0x70)

+1

多麼驚喜。有一次,我來到一個全局熱鍵線程,最重要的答案是「RegisterHotKey」而不是「SetWindowsHookEx」。 – CodesInChaos 2012-08-01 09:30:09

0

當您的應用程序不專注 - messags pump將無法獲取任何內容 - 您需要使用系統級API來掛接密鑰。 (嘗試在SetWindowsHookEx上搜索信息)