ให้ฮอตคีย์ฉันจะค้นหาโปรแกรมที่เป็นเจ้าของได้อย่างไร
ให้ฮอตคีย์ฉันจะค้นหาโปรแกรมที่เป็นเจ้าของได้อย่างไร
คำตอบ:
ข้อควรระวัง : ถ้าคุณใช้ Win 8 หรือใหม่กว่าอย่าใช้ยูทิลิตีนี้เพราะจะสร้างปัญหา - ดูความคิดเห็น
หากคุณใช้ Windows รุ่นก่อนหน้า Windows 8 Windows Hotkey Explorer
อาจเป็นสิ่งที่คุณต้องการ สิ่งนี้ถูกกล่าวถึงในคำถาม StackOverflow: ค้นหาว่ากระบวนการใดที่ลงทะเบียนฮอตคีย์ทั่วโลก (Windows API)
สิ่งนี้ใช้ได้กับฉันใน Win10 (และอาจเป็น Windows รุ่นล่าสุดที่ใกล้เคียงทั้งหมด) ... ก็คัดลอกมาที่นี่จากhttps://stackoverflow.com/a/43645062/995048เนื่องจากหน้านี้ดูเหมือนจะปรากฏขึ้นครั้งแรกในผลการค้นหา :
วิธีการหนึ่งที่เป็นไปได้คือการใช้เครื่องมือ Visual Studio Spy ++
ลองดูสิ:
- เรียกใช้เครื่องมือ (สำหรับฉันมันอยู่ที่
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
หรือใช้spyxx.exe
เพื่อตรวจสอบกระบวนการแบบ 32 บิต)- ในแถบเมนูเลือกSpy -> บันทึกข้อความ ... (หรือกดCtrl+ M)
- ตรวจสอบWindows ทั้งหมดในระบบในกรอบWindows เพิ่มเติม
- สลับไปที่แท็บข้อความ
- คลิกล้างทั้งหมดปุ่ม
- เลือก
WM_HOTKEY
ในกล่องรายการหรือตรวจสอบแป้นพิมพ์ในกลุ่มข้อความ (ถ้าคุณตกลงพร้อมเสียงที่อาจเป็นไปได้มากกว่า)- คลิกปุ่มตกลง
- กดปุ่มลัดที่มีปัญหา ( Win+ Rตัวอย่างเช่น)
- เลือก
WM_HOTKEY
บรรทัดในหน้าต่างข้อความ (Windows ทั้งหมด)คลิกขวาและเลือกคุณสมบัติ ...ในเมนูบริบท- ในข้อความคุณสมบัติโต้ตอบคลิกหน้าต่างมือจับการเชื่อมโยง (นี้จะเป็นที่จับสำหรับหน้าต่างที่ได้รับข้อความ)
- คลิกปุ่มซิงโครไนซ์ในหน้าต่างโต้ตอบคุณสมบัติ นี่จะแสดงหน้าต่างในทรีมุมมองหน้าต่างหลักของ Spy ++
- ในกล่องโต้ตอบคุณสมบัติหน้าต่างให้เลือกแท็บกระบวนการ
- คลิกลิงก์รหัสกระบวนการ นี้จะแสดงกระบวนการ (ในของฉันWin+ Rกรณี:
EXPLORER
)
WM_HOTKEY
ข้อความในบันทึกข้อความหลังจากกดปุ่มลัดคุณอาจต้องเรียกใช้ Spy ++ รุ่น 32 บิต .
สิ่งนี้อาจได้รับคำตอบใน 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 ตัวอย่างของฉันด้านบนเป็นรุ่นที่ขายตรงจากที่นั่นและไซต์นี้
หวังว่าจะช่วย!