3

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

また、ホットキーを所有している別のアプリの場合は、それをユーザーに表示できるようにしたいと思います。少なくともexeの名前。

ホットキーを実行する3つの方法を知っています。

  • 標準APIを使用したシステムフック
  • ショートカットのプロパティダイアログでホットキー機能を使用する
  • 非同期キーの状態をポーリングして応答する

3番目のタイプを検出できるとは思えませんが、他の2つはどうでしょうか。そして、私が知る必要がある他の状況はありますか?

4

1 に答える 1

4

標準APIでそれを行うには3つの方法が考えられます。

  • RegisterHotkey

  • SetWindowsHookEx(WH_KEYBOARD)

  • SetWindowsHookEx(WH_LL_KEYBOARD)

最初のアプローチでは、別のアプリケーションがすでに同じホットキーを登録しているかどうか(または、ショートカットがこのホットキーを使用しているかどうか、またはExplorer.exeがWin+Eまたはwin+Rであるためにホットキーを登録しているかどうか)の戻り値を取得します。ただし、この方法ではアプリケーション名を取得できません。

Windowsフックまたは「ホットキー」の非同期キー状態の使用:コンテキストでホットキーを使用する可能性があるため(最後の4つのキーストロークが「フリス」)そのように。keybd_event(ウィンドウをフォーカスした状態)を使用してホットキーを挿入し、イベントが「通過」するかどうかをテストできます。一方、フックを介して実装される「ホットキー」の一部のケースでは、キーストロークを消費しないため、引き続き通過します。

私が使用するアプローチ:最初に、ショートカットを入力するために、その正確なショートカットをショートカットボックスに入力する必要があることを確認します(それが失敗した場合、ユーザーはどのアプリケーションがそれを使用しているかを確認できます)。次に、RegisterHotkeyを使用します。これにより、(将来のセッションで)別の「正常に動作する」アプリケーションがこのショートカットを盗もうとしたかどうかがわかります。

于 2009-04-13T16:22:34.613 に答える