คำถามของคุณกระตุ้นความสนใจของฉันฉันจึงได้ทำการขุดคุ้ยและในขณะที่ฉันไม่มีคำตอบที่เหมาะสมสำหรับคุณฉันคิดว่าฉันจะแบ่งปันสิ่งที่ฉันมี
ฉันพบตัวอย่างการสร้างแป้นพิมพ์ 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 บิต .