2012-08-01 7 views
16

私は単純なWPFアプリケーションを持っており、WPFウィンドウが最小化されている場合でも、Windows(操作システム)で押したF1キーをキャプチャする必要があります。グローバル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(システム全体のホットキーを定義)とWindows APIのUnregisterHotKeyを使用してください。 pinvoke.netまたはこれらのチュートリアルからC#でこれらを使用してみてください:

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

どのような楽しい驚き。一度私はグローバルホットキースレッドに来て、トップの答えは 'SetWindowsHookEx'ではなく' RegisterHotKey'です。 – CodesInChaos

0

アプリケーションにフォーカスがない場合、メッセージポンプには何も取得されません。システムレベルAPIを使用してキーをフックする必要があります。 (SetWindowsHookExの情報を検索しようとすると)

関連する問題