2009-04-13 7 views
3

私はプログラム的にシステム内のホットキーを検出する方法を探しています。私のアプリは、さまざまなことを行うために設定可能なホットキーをサポートし、私は別のアプリはすでに1を引っかけたか、それは(ワークステーションをロックするのWin-Lのような)組み込みのWindowsホットキーかどう伝えることができるようにしたいと思います。システムホットキーをプログラムで検出する方法は?

そして、それはホットキーを所有している別のアプリケーションであれば、私は、ユーザーにそれを表示できるようにしたいと思います。少なくともexeの名前。ショートカットのキーの状態の非同期

  • ポーリングダイアログと
  • 応答性のホットキー機能を使用する標準APIの
  • を使用して

    • システムフック:

      私はホットキーを行うには、3つの方法を知っています

    は、私は他の二つの約3分のタイプが、何を検出することができ疑いますか?そして私が知る必要がある他の状況はありますか?

    私は標準APIでそれを行うには、3つの方法を考えることができ
  • 答えて

    3

    • RegisterHotkey

    • は、SetWindowsHookEx(WH_KEYBOARD)

    • は、SetWindowsHookEx(WH_LL_KEYBOARD)

    最初のアプローチでは、あなたは別のアプリケーションがすでに非常に同じホットキーを登録するかどうかを彼が値を返す(またはショートカットが、このホットキーを使用するかどうか、またはExplorer.exeがホットキーを登録し、それが勝利+ Eであるためか、+ Rを獲得します)。しかし、あなたはこの方法でアプリケーション名を取得しません。

    「ホットキー」のWindowsフックまたは非同期キーの状態を使用する:コンテキスト内でホットキーを使用する可能性があるため、ホットキーを検出することはできません(「irst」で「t」を置き換える4回のキーストロークは「Fris」でした)。あなたはkeybd_event(あなたのウィンドウに焦点を合わせて)を使ってホットキーを注入し、イベントが "通過する"かどうかテストすることができます。一方で、フックを介して実装された「ホットキー」のいくつかのケースでは、キーストロークを消費しないため、そのまま通過します。

    アプローチ私が使用します。まず、(それが失敗した場合、ユーザーはそれを使用しているアプリケーションが表示されます)のショートカットを入力するための、あなたのショートカットボックスにその正確なショートカットを入力する必要があることを確認してください。その後、RegisterHotkeyを使用して、別の「正常に動作する」アプリケーションがこのショートカットを盗もうとした場合に(将来のセッションで)気付くでしょう。

    関連する問題