題 如何確定哪個進程在Windows中擁有熱鍵?


給定一個熱鍵,我如何找到擁有它的程序?


84
2017-07-23 09:49


起源


哪個版本的Windows? - Ivo Flipse♦


答案:


警告:如果您使用Win 8或更高版本,請不要使用此實用程序,因為它會產生一些麻煩 - 請參閱註釋。

如果您運行的是早於Windows 8的Windows,那麼 Windows Hotkey Explorer 可能就是你想要的。 StackOverflow問題中也提到了這一點: 找出註冊全球熱鍵的流程? (Windows API)


45
2017-09-21 13:14



HotKey資源管理器在Windows 8中搞得非常糟糕 - 在啟動時它基本上“按下”每個熱鍵,導致各種奇怪的事情發生,之後它會鎖定並且必須被殺死。 - Nathan Ridley
@NathanRidley呃。我希望我之前看過你的評論。這是與Win8和Autohotkey的可怕組合。這種鍵盤抨擊也可能造成一些嚴重的傷害。 - VitalyB
不要在Windows 10上使用Hotkey Explorer。 @NathanRidley提到了同樣的事情。剛剛找到了困難的方法。 - Artem Russakovskii
在Windows 7上也非常糟糕。它將主顯示器的分辨率切換為640x480(多顯示器設置)。 - Costa
我希望有一個更新的工具,如Hotkey Exporer適用於Windows 8和10 - Flion


這對我來說在Win10(以及可能是所有其他甚至是模糊的最近版本的Windows)中也適用於我...也在這裡複製 https://stackoverflow.com/a/43645062/995048 因為此頁面似乎在搜索結果中排在第一位:

一種可能的方法是使用 Visual Studio工具Spy ++

嘗試一下:

  1. 運行工具(對我來說,它是在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
  2. 在菜單欄中,選擇 間諜  - > 記錄消息...... (或打 按Ctrl + 中號
  3. 校驗 系統中的所有Windows 在裡面 額外的Windows 幀
  4. 切換到 消息 標籤
  5. 點擊 全部清除 按鍵
  6. 選擇 WM_HOTKEY 在列錶框中,或檢查 鍵盤 在 消息組 (如果你沒有更多的潛在噪音)
  7. 點擊  按鍵
  8. 按下有問題的熱鍵(贏得 + [R, 例如)
  9. 選擇 WM_HOTKEY 在線 消息(所有Windows) 窗口,右鍵單擊,然後選擇 屬性... 在上下文菜單中
  10. 在裡面 消息屬性 對話框,單擊 窗把手 link(這將是收到消息的窗口的句柄)
  11. 點擊 同步 按鈕上 窗口屬性 對話。這將在主Spy ++窗口樹視圖中顯示該窗口。
  12. 窗口屬性 對話框,選擇 處理 標籤
  13. 點擊 進程ID 鏈接。這將告訴你這個過程(在我的 贏得 + [R 案件: EXPLORER

34
2018-04-27 17:38



這是一個很好的答案,它有很多步驟,但提供了非常詳細的信息。請注意,您需要以某種方式安裝SPY ++,並且需要在64位PC上運行64位版本,否則它將無法運行。我認為安裝SPY ++的“最簡單”方法是安裝Visual Studio 2017,請務必選擇C ++有效負載。對於非開發人員來說,這可能有點太多了。 - Roy T.
太棒了。精緻,但完美! - angularsen
很棒的答案!請注意 64位版本的Spy ++僅捕獲64位應用程序的消息,所以如果你沒有看到 WM_HOTKEY 消息在 消息日誌 按下熱鍵後,您可能需要運行32位版本的Spy ++。 - Dawid Ferenczy
鏈接應更新為 新文檔網站。對於Visual Studio 2017,唯一需要的有效負載是“Visual C ++核心桌面功能“。未記錄特定於應用程序的熱鍵?例如,MS Word中的Ctrl + B將使文本變為粗體。 - Franklin Yu
非常感謝你做的這些。我終於找到了從我這裡偷取Ctrl Shift F的內容。 (這是Razer Cortex)。另一個注意事項是,當您嘗試查看屬性時,有時spy ++會崩潰。 (然後在重新啟動之前你不能再看到任何鉤子。)我能夠通過在步驟9之前右鍵單擊並選擇“停止記錄消息”來解決此問題。此時,當我試圖檢查屬性時,它不再崩潰。再次感謝! - Khale_Kitha


這個線程中的Stack Overflow可能已經回答了這個問題:

找出註冊全球熱鍵的流程? (Windows API)

這裡的 Pauk的答案是:

你的問題引起了我的興趣,所以我做了一些挖掘和   我想,不幸的是,我沒有適當的答案   我會分享我擁有的東西。

我找到了這個 創建鍵盤鉤子的例子(在Delphi中)   寫於1998年,但在Delphi 2007中有幾個可編輯   調整。

這是一個調用DLL的DLL SetWindowsHookEx 通過一個   回調函數,然後可以攔截擊鍵:在這種情況下,   它為了好玩而修補它們,將左側光標向右移動等。   然後,一個簡單的應用程序調用DLL並根據其報告其結果   一個TTimer事件。如果您有興趣,我可以發布基於Delphi 2007的版本   碼。

它有很好的文檔和評論,你可能會使用它   制定關鍵新聞的基礎。如果你能得到   發送鍵擊的應用程序的句柄,你可以   以這種方式追踪它。有了這個手柄,你就能得到它   您需要的信息非常容易。

其他應用程序嘗試通過他們的確定熱鍵   快捷方式,因為它們可以包含一個快捷鍵,這是另一個   熱鍵詞。但是大多數應用程序都不傾向於設置它   財產,所以它可能不會返回太多。如果你對此感興趣   路線,德爾福有權訪問 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,有一個 好   關於使用快捷方式/ shell鏈接的部分 在Borland   Steve Teixeira和Xavier Pacheco撰寫的Delphi 6開發人員指南。我的   上面的例子是那裡的屠宰版本 這個網站

希望有所幫助!


5
2017-07-23 09:54