ホットキーが与えられた場合、どのプログラムがそれを所有しているかをどのようにして見つけることができますか?
注意:Win 8以降を使用している場合は、このユーティリティを使用しないでください。問題が発生します。コメントを参照してください。
Windows 8より前のWindowsを実行している場合は Windows Hotkey Explorer
はおそらくあなたが望むものです。これは、StackOverflowの質問でも言及されています。 グローバルホットキーを登録したプロセスを見つけますか?(Windows API) 。
これは私にとってWin10(そしておそらく他のすべての漠然とした最近のバージョンのWindows)でも機能します...また、ここから https://stackoverflow.com/a/43645062/995048 からコピーされています検索結果の最初に表示するには:
1つの可能な方法は、 Visual StudioツールSpy ++ を使用することです。
これを試してみてください:
- ツールを実行します(私にとっては
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_AMD64.exe
にあります。またはspyxx.exe
を使用して32ビットプロセスを監視します)- メニューバーで、Spy->Log messages ...を選択します(または Ctrl + M)
- Additional WindowsフレームでAll Windows in Systemをチェックします
- Messagesタブに切り替えます
- Clear Allボタンをクリックします
- リストボックスで
WM_HOTKEY
を選択するか、Message GroupsでKeyboardをオンにします(ノイズの可能性が高い場合は、 )- [〜#〜] ok [〜#〜]ボタンをクリックします
- 問題のホットキーを押します(Win + R、 例えば)
- Messages(All Windows)ウィンドウで
WM_HOTKEY
行を選択して右クリックし、Properties ...を選択しますコンテキストメニュー- Message Propertiesダイアログで、Window Handleリンクをクリックします(これはメッセージを受信したウィンドウのハンドルになります)
- Window PropertiesダイアログのSynchronizeボタンをクリックします。これにより、メインのSpy ++ウィンドウツリービューにウィンドウが表示されます。
- Window Propertiesダイアログで、Processタブを選択します
- Process IDリンクをクリックします。これはあなたにプロセスを示します(私の中で Win + R ケース:
Explorer
)
これはおそらく、このスレッドのスタックオーバーフローで回答されています。
グローバルホットキーを登録したプロセスを確認しますか?(Windows API)
これが Pauk の答えです。
あなたの質問は私の興味をそそったので、私は少し掘り下げましたが、残念ながら私はあなたに適切な答えがありませんが、私は私が持っているものを共有したいと思いました。
私はこれを見つけました (Delphiで)キーボードフックを作成する例 1998年に書かれましたが、Delphi 2007でいくつかの微調整を行ってコンパイルできます。
これは、コールバック関数を通過する
SetWindowsHookEx
への呼び出しを含むDLLであり、キーストロークをインターセプトできます。この場合、楽しみのためにそれらをいじくり回し、左カーソルを変更します。次に、単純なアプリがDLLを呼び出し、TTimerイベントに基づいてその結果を報告します。興味がある場合は、Delphi 2007ベースのコードを投稿できます。これは十分に文書化され、コメントが付けられており、キーを押す場所を決定するための基礎として使用できる可能性があります。キーストロークを送信したアプリケーションのハンドルを取得できれば、その方法で追跡できます。そのハンドルを使用すると、必要な情報を非常に簡単に取得できます。
他のアプリは、ショートカットキーを含めることができるため、ショートカットを確認してホットキーを決定しようとしました。これは、ホットキーの別の用語です。ただし、ほとんどのアプリケーションはこのプロパティを設定する傾向がないため、あまり返らない場合があります。そのルートに興味がある場合、Delphiは
IShellLink
COMインターフェイスにアクセスできます。これを使用してショートカットをロードし、そのホットキーを取得できます。uses ShlObj, ComObj, ShellAPI, ActiveX, CommCtrl; procedure GetShellLinkHotKey; var LinkFile : WideString; SL: IShellLink; PF: IPersistFile; HotKey : Word; HotKeyMod: Byte; HotKeyText : string; begin LinkFile := 'C:\Temp\Temp.lnk'; OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL)); // The IShellLink implementer must also support the IPersistFile // interface. Get an interface pointer to it. PF := SL as IPersistFile; // Load file into IPersistFile object OleCheck(PF.Load(PWideChar(LinkFile), STGM_READ)); // Resolve the link by calling the Resolve interface function. OleCheck(SL.Resolve(0, SLR_ANY_MATCH or SLR_NO_UI)); // Get hotkey info OleCheck(SL.GetHotKey(HotKey)); // Extract the HotKey and Modifier properties. HotKeyText := ''; HotKeyMod := Hi(HotKey); if (HotKeyMod and HOTKEYF_ALT) = HOTKEYF_ALT then HotKeyText := 'ALT+'; if (HotKeyMod and HOTKEYF_CONTROL) = HOTKEYF_CONTROL then HotKeyText := HotKeyText + 'CTRL+'; if (HotKeyMod and HOTKEYF_SHIFT) = HOTKEYF_SHIFT then HotKeyText := HotKeyText + 'SHIFT+'; if (HotKeyMod and HOTKEYF_EXT) = HOTKEYF_EXT then HotKeyText := HotKeyText + 'Extended+'; HotKeyText := HotKeyText + Char(Lo(HotKey)); if (HotKeyText = '') or (HotKeyText = #0) then HotKeyText := 'None'; ShowMessage('Shortcut Key - ' + HotKeyText); end;
Safari Books Online へのアクセス権がある場合、 ショートカットの使用に関する優れたセクション/シェルリンク が、Borland Delphi 6開発者ガイドのSteve TeixeiraとXavier Pachecoによって作成されています。 。上記の私の例は、そこからの屠殺バージョンと this site です。
お役に立てば幸いです。