คำถามของคุณกระตุ้นความสนใจของฉันฉันจึงได้ทำการขุดคุ้ยและในขณะที่ฉันไม่มีคำตอบที่เหมาะสมสำหรับคุณฉันคิดว่าฉันจะแบ่งปันสิ่งที่ฉันมี
ฉันพบตัวอย่างการสร้างแป้นพิมพ์ hook (ใน 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 ตัวอย่างของฉันด้านบนเป็นเวอร์ชันที่ถูกฆ่าจากที่นั่นและไซต์นี้
หวังว่าจะช่วยได้!
               
              
WM_HOTKEYข้อความในบันทึกข้อความหลังจากกดปุ่มลัดคุณอาจต้องเรียกใช้ Spy ++ เวอร์ชัน 32 บิต .