回答:
注意: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ビットプロセスの監視に使用します)- メニューバーで、[ スパイ] -> [メッセージのログ...]を選択します(またはCtrl+を押しますM)
- [ 追加のWindows]フレームで[システム内のすべてのウィンドウを確認]
- [ メッセージ ]タブに切り替えます
- [ すべてクリア ]ボタンをクリックします
WM_HOTKEY
リストボックスで選択するか、メッセージグループのキーボードをチェックします(ノイズが多い可能性がある場合は)- OKボタンをクリックしてください
- 問題のホットキーを押します(Win+ Rなど)
- [ メッセージ(すべてのウィンドウ) ]ウィンドウで
WM_HOTKEY
行を選択し、右クリックして、コンテキストメニューの[ プロパティ... ]を選択します。- でメッセージのプロパティ ]ダイアログ、クリックしウィンドウハンドルのリンクを(これはメッセージを受け取ったウィンドウのハンドルになります)
- [ ウィンドウのプロパティ ]ダイアログの[ 同期 ]ボタンをクリックします。これにより、メインのSpy ++ウィンドウツリービューにウィンドウが表示されます。
- 上のウィンドウの[プロパティ ]ダイアログ、選択プロセス ]タブを
- [ プロセスID]リンクをクリックします。これは、(私はあなたのプロセスが表示されますWin+のR場合:
EXPLORER
)
WM_HOTKEY
にメッセージメッセージログをホットキーを押した後、あなたはスパイの32ビットバージョンを実行する必要があります++ 。
これはおそらく、このスレッドのStack Overflowで回答されています。
グローバルホットキーを登録したプロセスを確認しますか?(Windows API)
ここだPaukさんの答えは:
あなたの質問が私の興味をそそったので、少し掘り下げましたが、残念ながらあなたに適切な答えがありませんが、私が持っているものを共有すると思いました。
1998年に記述されたキーボードフック(Delphiで)を作成するこの例を見つけましたが、Delphi 2007ではいくつかの調整を加えてコンパイルできます。
これは
SetWindowsHookEx
、コールバック関数を通過する呼び出しを持つ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にアクセスできる場合は、Steve TeixeiraとXavier PachecoによるBorland Delphi 6開発者ガイドにショートカット/シェルリンクの操作に関する適切なセクションがあります。上記の私の例はそことこのサイトから屠殺されたバージョンです。
お役に立てば幸いです!