ฉันจะทราบได้อย่างไรว่ากระบวนการใดเป็นเจ้าของฮอตคีย์ใน Windows


คำตอบ:


46

ข้อควรระวัง : ถ้าคุณใช้ Win 8 หรือใหม่กว่าอย่าใช้ยูทิลิตีนี้เพราะจะสร้างปัญหา - ดูความคิดเห็น

หากคุณใช้ Windows รุ่นก่อนหน้า Windows 8 Windows Hotkey Explorerอาจเป็นสิ่งที่คุณต้องการ สิ่งนี้ถูกกล่าวถึงในคำถาม StackOverflow: ค้นหาว่ากระบวนการใดที่ลงทะเบียนฮอตคีย์ทั่วโลก (Windows API)


32
HotKey explorer สกรูค่อนข้างแย่ใน Windows 8 - ในการเริ่มต้นมัน "กด" ทุกปุ่มลัดทำให้สิ่งแปลก ๆ เกิดขึ้นทุกอย่างหลังจากนั้นมันล็อคและต้องถูกฆ่า
Nathan Ridley

2
@NathanRidley Ugh ฉันขอให้ฉันอ่านความคิดเห็นของคุณก่อน นี่เป็นการผสมผสานที่น่ากลัวกับ Win8 และ Autohotkey การทุบแป้นพิมพ์แบบนี้อาจสร้างความเสียหายร้ายแรงได้เช่นกัน
VitalyB

11
ห้ามใช้ Hotkey Explorer บน Windows 10 เช่นกัน @NathanRidley พูดถึงสิ่งเดียวกัน เพิ่งค้นพบวิธีที่ยาก
Artem Russakovskii

5
อีกทั้งสวยใน Windows 7 มันเปลี่ยนความละเอียดของหน้าจอหลักเป็น 640x480 (ตั้งค่าจอภาพหลายจอ)
คอสตา

3
ฉันหวังว่าจะมีเครื่องมือล่าสุดเช่น Hotkey Exporer ที่ใช้งานได้กับ Windows 8 & 10
Flion

60

สิ่งนี้ใช้ได้กับฉันใน 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หรือใช้spyxx.exeเพื่อตรวจสอบกระบวนการแบบ 32 บิต)
  2. ในแถบเมนูเลือกSpy -> บันทึกข้อความ ... (หรือกดCtrl+ M)
  3. ตรวจสอบWindows ทั้งหมดในระบบในกรอบWindows เพิ่มเติม
  4. สลับไปที่แท็บข้อความ
  5. คลิกล้างทั้งหมดปุ่ม
  6. เลือกWM_HOTKEYในกล่องรายการหรือตรวจสอบแป้นพิมพ์ในกลุ่มข้อความ (ถ้าคุณตกลงพร้อมเสียงที่อาจเป็นไปได้มากกว่า)
  7. คลิกปุ่มตกลง
  8. กดปุ่มลัดที่มีปัญหา ( Win+ Rตัวอย่างเช่น)
  9. เลือกWM_HOTKEYบรรทัดในหน้าต่างข้อความ (Windows ทั้งหมด)คลิกขวาและเลือกคุณสมบัติ ...ในเมนูบริบท
  10. ในข้อความคุณสมบัติโต้ตอบคลิกหน้าต่างมือจับการเชื่อมโยง (นี้จะเป็นที่จับสำหรับหน้าต่างที่ได้รับข้อความ)
  11. คลิกปุ่มซิงโครไนซ์ในหน้าต่างโต้ตอบคุณสมบัติ นี่จะแสดงหน้าต่างในทรีมุมมองหน้าต่างหลักของ Spy ++
  12. ในกล่องโต้ตอบคุณสมบัติหน้าต่างให้เลือกแท็บกระบวนการ
  13. คลิกลิงก์รหัสกระบวนการ นี้จะแสดงกระบวนการ (ในของฉันWin+ Rกรณี: EXPLORER)

3
นี่คือคำตอบที่ดีมันเป็นขั้นตอนมากมาย แต่ให้ข้อมูลอย่างละเอียด โปรดทราบว่าคุณจะต้องติดตั้ง SPY ++ อย่างใดและคุณจำเป็นต้องเรียกใช้รุ่น 64 บิตบนพีซี 64 บิตมิฉะนั้นจะไม่สามารถใช้งานได้ ฉันคิดว่าวิธีที่ 'ง่ายที่สุด' ในการติดตั้ง SPY ++ คือการติดตั้ง Visual Studio 2017 ต้องแน่ใจว่าได้เลือก C ++ payload สำหรับผู้ที่ไม่ใช่นักพัฒนานี่อาจเป็นงานที่มากเกินไป
Roy T.

2
มันสมบูรณ์แบบ บรรจง แต่สมบูรณ์แบบ!
angularsen

16
คำตอบที่ดี! โปรดทราบว่าSpy ++ รุ่น 64 บิตจะจับเฉพาะข้อความสำหรับแอปพลิเคชัน 64 บิตดังนั้นหากคุณไม่เห็นWM_HOTKEYข้อความในบันทึกข้อความหลังจากกดปุ่มลัดคุณอาจต้องเรียกใช้ Spy ++ รุ่น 32 บิต .
Dawid Ferenczy Rogožan

การเชื่อมโยงควรได้รับการปรับปรุงเพื่อให้เว็บไซต์เอกสารใหม่ สำหรับ Visual Studio 2017 payload ที่ต้องการเพียงอย่างเดียวคือ " คุณลักษณะเดสก์ท็อปหลักของ Visual C ++ " ปุ่มลัดเฉพาะแอปพลิเคชันไม่ได้ถูกบันทึกไว้? ตัวอย่างเช่น Ctrl + B ใน MS Word จะทำให้ข้อความเป็นตัวหนา
Franklin Yu

ขอบคุณมากสำหรับเรื่องนี้. ในที่สุดฉันก็พบว่าสิ่งที่ขโมย Ctrl Shift F จากฉัน (มันคือ Razer Cortex) หมายเหตุอีกประการหนึ่งคือบางครั้ง spy ++ จะล้มเหลวเมื่อคุณพยายามดูคุณสมบัติ (และจากนั้นคุณจะไม่เห็น hooks อีกต่อไปจนกว่าจะรีบูตเครื่อง) ฉันสามารถแก้ไขปัญหานี้ได้ด้วยการคลิกขวาก่อนที่ขั้นตอนที่ 9 และเลือก "หยุดการบันทึกข้อความ" ณ จุดนั้นมันไม่ล้มเหลวอีกต่อไปเมื่อฉันพยายามตรวจสอบคุณสมบัติ ขอบคุณอีกครั้ง!
Khale_Kitha

6

สิ่งนี้อาจได้รับคำตอบใน Stack Overflow ในหัวข้อนี้:

ค้นหากระบวนการใดที่ลงทะเบียนฮอตคีย์ทั่วโลก (Windows API)

นี่คือคำตอบของPauk :

คำถามของคุณกระตุ้นความสนใจของฉันดังนั้นฉันจึงทำการขุดบ้างและในขณะที่โชคไม่ดีที่ฉันไม่มีคำตอบที่เหมาะสมสำหรับคุณฉันคิดว่าฉันจะแบ่งปันสิ่งที่ฉันมี

ฉันพบตัวอย่างของการสร้าง hook keyboard (ใน Delphi) ที่ เขียนในปี 1998 แต่สามารถคอมไพล์ได้ใน Delphi 2007 ด้วยการปรับแต่งสองสามอย่าง

มันเป็น DLL ที่มีการเรียกไปยัง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มีส่วนที่ดีเกี่ยวกับการทำงานกับทางลัด / ลิงค์เชลล์ในคู่มือนักพัฒนาของ Borland Delphi 6 โดย Steve Teixeira และ Xavier Pacheco ตัวอย่างของฉันด้านบนเป็นรุ่นที่ขายตรงจากที่นั่นและไซต์นี้

หวังว่าจะช่วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.