आपके प्रश्न ने मेरी रुचि को बढ़ा दिया है, इसलिए मैंने थोड़ी खुदाई की है और जबकि, दुर्भाग्य से मेरे पास आपके लिए उचित उत्तर नहीं है, मैंने सोचा कि मेरे पास जो है वह साझा करूँगा।
मुझे 1998 में लिखा कीबोर्ड हुक (डेल्फी में) बनाने का यह उदाहरण मिला , लेकिन डेल्फी 2007 में एक दोहों के साथ इसका संकलन किया जा सकता है।
यह एक कॉल के साथ एक DLL है SetWindowsHookEx
जो कॉलबैक फ़ंक्शन से गुजरता है, जो तब कुंजी स्ट्रोक को रोक सकता है: इस मामले में, यह उनके लिए मज़ाक के साथ छेड़छाड़ कर रहा है, बाएं कर्सर को दाईं ओर बदल रहा है, आदि। एक साधारण ऐप फिर DLL को कॉल करता है और वापस रिपोर्ट करता है। एक TTimer घटना के आधार पर इसके परिणाम। यदि आप रुचि रखते हैं तो मैं डेल्फी 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;
यदि आप सफारी बुक्स ऑनलाइन तक पहुंच गए हैं , तो स्टीव टेक्सीरा और जेवियर पचेको द्वारा बोरलैंड डेल्फी 6 डेवलपर गाइड में शॉर्टकट / शेल लिंक के साथ काम करने के बारे में एक अच्छा खंड है । ऊपर मेरा उदाहरण वहाँ और इस साइट से एक कसाई संस्करण है ।
उम्मीद है की वो मदद करदे!
WM_HOTKEY
में संदेश नहीं दिखता है , तो आपको स्पाई ++ का 32-बिट संस्करण चलाने की आवश्यकता हो सकती है ।