Windowsでホットキーを所有しているプロセスを特定するにはどうすればよいですか?


回答:


46

注意:Win 8以降を使用している場合は、このユーティリティを使用しないでください。問題が発生する可能性があります。コメントを参照してください。

Windows 8より前のWindowsを実行している場合Windows Hotkey Explorerは、おそらくあなたが望むものです。これはStackOverflowの質問にも記載されています。どのプロセスがグローバルホットキーを登録したかを調べますか?(Windows API)


32
HotKeyエクスプローラーは、Windows 8でかなりひどく失敗します-起動時に基本的にすべてのホットキーを「押し」、すべての種類の奇妙なことを引き起こし、その後ロックして殺さなければなりません。
ネイサンリドリー

2
@NathanRidleyうーん。前にあなたのコメントを読んでほしい。これはWin8とAutohotkeyとの恐ろしい組み合わせでした。この種のキーボードバッシングは、いくつかの深刻なダメージを与える可能性もあります。
VitalyB

11
Windows 10でもHotkey Explorerを使用しないでください。@NathanRidleyが言及したのと同じことを行います。難しい方法を見つけました。
アルテムルサコフスキー

5
また、Windows 7ではかなり厄介です。メインモニターの解像度を640x480(マルチモニターのセットアップ)に切り替えました。
コスタ

3
私は、Windows 8&10の作品ホットキーExporerのような、より最近のツールがあったことを望む
Flion

60

これはWin10(およびおそらく他のすべての漠然と最新バージョンのWindows)でも動作します... このページは検索結果で最初に表示されるようであるため、https: //stackoverflow.com/a/43645062/995048からもコピーされます

1つの可能な方法は、Visual StudioツールSpy ++を使用することです

これを試してみてください:

  1. ツールを実行します(私にとってはC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe、にあるか、spyxx.exe32ビットプロセスの監視に使用します)
  2. メニューバーで、[ スパイ] -> [メッセージのログ...]を選択します(またはCtrl+を押しますM
  3. [ 追加のWindows]フレームで[システム内のすべてのウィンドウを確認]
  4. [ メッセージ ]タブに切り替えます
  5. [ すべてクリア ]ボタンをクリックします
  6. WM_HOTKEYリストボックスで選択するか、メッセージグループのキーボードをチェックします(ノイズが多い可能性がある場合は)
  7. OKボタンをクリックしてください
  8. 問題のホットキーを押します(Win+ Rなど)
  9. [ メッセージ(すべてのウィンドウ) ]ウィンドウでWM_HOTKEY行を選択し、右クリックして、コンテキストメニューの[ プロパティ... ]を選択します。
  10. メッセージのプロパティ ]ダイアログ、クリックしウィンドウハンドルのリンクを(これはメッセージを受け取ったウィンドウのハンドルになります)
  11. [ ウィンドウのプロパティ ]ダイアログの[ 同期 ]ボタンをクリックします。これにより、メインのSpy ++ウィンドウツリービューにウィンドウが表示されます。
  12. 上のウィンドウの[プロパティ ]ダイアログ、選択プロセス ]タブを
  13. [ プロセスID]リンクをクリックします。これは、(私はあなたのプロセスが表示されますWin+のR場合:EXPLORER

3
これは素晴らしい答えです。多くの手順がありますが、完全に詳細な情報を提供します。何らかの方法でSPY ++をインストールする必要があり、64ビットPCで64ビットバージョンを実行する必要があります。そうしないと機能しません。SPY ++をインストールする「最も簡単な」方法は、Visual Studio 2017をインストールすることだと思います。必ずC ++ペイロードを選択してください。開発者以外の人にとっては、これは少し手間がかかるかもしれません。
ロイT.

2
これは完璧です。精巧ですが、完璧です!
アンギュラーセン

16
素晴らしい答えです!ことだけで、ノートのスパイ++の64ビット版は、64ビット・アプリケーションのためのメッセージのみをキャッチし、あなたが表示されない場合WM_HOTKEYにメッセージメッセージログをホットキーを押した後、あなたはスパイの32ビットバージョンを実行する必要があります++ 。
ダウィド・フェレンツィーロゴザン

リンクは新しいドキュメントサイトに更新する必要があります。Visual Studio 2017の場合、必要なペイロードは「Visual C ++コアデスクトップ機能」のみです。アプリケーション固有のホットキーが記録されていませんか?たとえば、MS WordのCtrl + Bは、テキストを太字にします。
フランクリンゆう

本当にありがとうございました。最後に、Ctrl Shift Fを盗んでいるものを見つけました。(Razer Cortexでした)。別の注意点は、プロパティを表示しようとするとspy ++がクラッシュする場合があることです。(そして、再起動するまでこれ以上フックを見ることができません。)これを解決するには、ステップ9の前に右クリックし、「ロギングメッセージの停止」を選択しました。その時点で、プロパティを調べようとしてもクラッシュしなくなりました。再度、感謝します!
Khale_Kitha

6

これはおそらく、このスレッドのStack Overflowで回答されています。

グローバルホットキーを登録したプロセスを確認しますか?(Windows API)

ここだPaukさんの答えは:

あなたの質問が私の興味をそそったので、少し掘り下げましたが、残念ながらあなたに適切な答えがありませんが、私が持っているものを共有すると思いました。

1998年に記述されたキーボードフック(Delphiで)を作成するこのを見つけましたが、Delphi 2007ではいくつかの調整を加えてコンパイルできます。

これはSetWindowsHookEx、コールバック関数を通過する呼び出しを持つDLL です。この場合、キーストロークをインターセプトできます。この場合、楽しみのためにそれらをいじくり回し、左カーソルを右に変更します。 TTimerイベントに基づいた結果。興味があれば、Delphi 2007ベースのコードを投稿できます。

十分に文書化され、コメントが付けられており、キープレスがどこに向かっているのかを判断する基礎として使用できる可能性があります。キーストロークを送信したアプリケーションのハンドルを取得できる場合は、その方法で追跡できます。そのハンドルを使用すると、必要な情報を非常に簡単に取得できます。

他のアプリは、ショートカットキーを含めることができるため、ショートカットを使用してホットキーを決定しようとしましたが、これはホットキーの単なる用語です。ただし、ほとんどのアプリケーションはこのプロパティを設定する傾向がないため、あまり返されない場合があります。そのルートに興味がある場合、DelphiはIShellLinkCOMインターフェイスにアクセスでき、ショートカットをロードしてホットキーを取得するために使用できます。

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開発者ガイドにショートカット/シェルリンクの操作に関する適切なセクションがあります。上記の私の例はそことこのサイトから屠殺されたバージョンです。

お役に立てば幸いです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.