18

単純なWPFアプリケーションがあり、WPFウィンドウが最小化されているか、アクティブ化されていない場合でも、Windows(オペレーティングシステム)で押されたF1キーをキャプチャする必要があります。

これを検出するのに問題があります。インターネットで検索したところ、たくさんの結果が見つかりましたが、役に立ちませんでした。

アプリケーション内で押されたキーを検出するために、次の単純なコードを使用しました。

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

しかし、私のウィンドウがアクティブ化されていない場合、これは機能しません。

だから、私の質問は:グローバルキープレスを検出する方法ですか?

繰り返しますが、これはWPFアプリケーションです。

4

2 に答える 2

24

する必要はありませんKeyboard HookingRegisterHotKey(システム全体のホットキーを定義する)WindowsAPIから使用するだけUnregisterHotKeyです。pinvoke.netまたはこれらのチュートリアルのC#でこれらを使用してみてください。

Microsoftフォーラムにサンプルがあります。

これらの修飾子と仮想キーコードを使用できます。

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

たとえば、F1キーはVK_F1 (0x70)です。

于 2012-08-01T04:49:06.980 に答える
0

アプリケーションにフォーカスがない場合(messags pumpは何も取得しません)、キーをフックするためにシステムレベルのAPIを使用する必要があります。(SetWindowsHookExで情報を検索してみてください)

于 2012-08-01T03:57:06.140 に答える