2012-08-01 8 views
16

Ich habe eine einfache WPF-Anwendung und ich muss F1-Taste in Windows (Operation System) gedrückt erfassen, auch wenn mein WPF-Fenster minimiert ist, oder es nicht aktiviert ist.Global Windows Key Drücken Sie

Ich habe Probleme mit dieser Feststellung. Ich suchte im Internet und ich fand viele Ergebnisse, aber sie haben mir nicht geholfen.

Für eine Taste gedrückt, innerhalb der Anwendung Erkennung verwenden ich diesen einfachen Code:

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

Aber das funktioniert nicht, wenn mein Fenster nicht aktiviert ist.

Also, meine Frage ist: , wie globale Taste drücken?

Ich wiederhole: Es ist eine WPF-Anwendung.

Antwort

21

Keine Notwendigkeit zu Keyboard Hooking. Verwenden Sie einfach RegisterHotKey (Definiert einen systemweiten Hotkey) und UnregisterHotKey von Windows-API. Versuchen Sie, diese unter Verwendung von in C# aus pinvoke.net oder diesen Anleitungen:

Es gibt eine Probe in Microsoft Forums.

können Sie diese Modifikatoren verwenden und Virtual-Key Codes:

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

zum Beispiel F1-Taste ist VK_F1 (0x70).

+1

Was für eine angenehme Überraschung. Für einmal komme ich zu einem globalen Hotkey-Thread und die oberste Antwort ist 'RegisterHotKey' und nicht' SetWindowsHookEx'. – CodesInChaos

0

Wenn Ihre Anwendung nicht im Fokus ist - messags Pumpe wird nichts bekommen - Sie müssen System-Level-APIs für den Haken Schlüssel verwenden. (versuchen Sie, Informationen über SetWindowsHookEx zu suchen)

Verwandte Themen