एक हॉटकी को देखते हुए, मैं यह कैसे पता लगा सकता हूं कि कौन सा प्रोग्राम इसका मालिक है?
एक हॉटकी को देखते हुए, मैं यह कैसे पता लगा सकता हूं कि कौन सा प्रोग्राम इसका मालिक है?
जवाबों:
सावधानी : यदि आप विन 8 या उसके बाद का उपयोग करते हैं, तो इस उपयोगिता का उपयोग न करें क्योंकि यह कुछ परेशानी पैदा करेगा - टिप्पणियां देखें।
यदि आप विंडोज 8 की तुलना में पहले विंडोज चला रहे हैं, तो Windows Hotkey Explorer
संभवतः वही है जो आप चाहते हैं। स्टैकऑवरफ्लो प्रश्न में यह भी उल्लेख किया गया है: पता लगाएँ कि किस प्रक्रिया ने एक वैश्विक हॉटकी पंजीकृत की? (विंडोज एपीआई) ।
यह मेरे लिए Win10 में काम करता है (और शायद अन्य सभी-हाल ही में विंडोज के संस्करणों में भी) ... https://stackoverflow.com/a/43645062/995048 से भी यहां कॉपी किया गया क्योंकि यह पृष्ठ खोज परिणामों में पहले आ रहा है :
विज़ुअल स्टूडियो टूल Spy ++ का उपयोग करने का एक संभावित तरीका है ।
इसे आजमाइए:
- उपकरण चलाएं (मेरे लिए, यह 32-बिट प्रक्रियाओं की निगरानी के लिए
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe
उपयोग में है , याspyxx.exe
)- मेनू बार में, स्पाई चुनें -> लॉग संदेश ... (या हिट Ctrl+ M)
- अतिरिक्त विंडोज फ्रेम में सिस्टम में सभी विंडोज की जांच करें
- संदेश टैब पर स्विच करें
- Clear All बटन पर क्लिक करें
- का चयन करें
WM_HOTKEY
लिस्टबॉक्स में, या जाँच कीबोर्ड में संदेश समूह (यदि आप और अधिक संभावित शोर के साथ ठीक कर रहे हैं)- ओके बटन पर क्लिक करें
- प्रश्न में हॉटकी दबाएं ( उदाहरण के लिए Win+ R)
- संदेश (सभी विंडोज) विंडो
WM_HOTKEY
में लाइन का चयन करें , राइट क्लिक करें, और संदर्भ मेनू में गुण ... का चयन करें- में संदेश गुण संवाद, क्लिक करें विंडो हैंडल लिंक (इस विंडो कि संदेश प्राप्त करने के लिए संभाल हो जाएगा)
- विंडो प्रॉपर्टीज डायलॉग पर सिंक्रोनाइज़ बटन पर क्लिक करें । यह मुख्य स्पाई ++ विंडो ट्रीव्यू में विंडो को दिखाएगा।
- पर खिड़की गुण संवाद, चयन प्रक्रिया टैब
- प्रक्रिया आईडी लिंक पर क्लिक करें । यह आपको प्रक्रिया दिखाएगा (मेरे Win+ Rमामले में
EXPLORER
) :
WM_HOTKEY
में संदेश नहीं दिखता है , तो आपको स्पाई ++ का 32-बिट संस्करण चलाने की आवश्यकता हो सकती है ।
यह संभवतः इस धागे में स्टैक ओवरफ्लो पर उत्तर दिया गया है:
पता करें कि किस प्रक्रिया ने एक वैश्विक हॉटकी पंजीकृत की? (विंडोज एपीआई)
यहाँ है Pauk जवाब:
आपके प्रश्न ने मेरी रुचि को बढ़ा दिया है, इसलिए मैंने थोड़ी खुदाई की है और जबकि, दुर्भाग्य से मेरे पास आपके लिए उचित उत्तर नहीं है, मैंने सोचा कि मेरे पास जो है वह साझा करूँगा।
मुझे 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 डेवलपर गाइड में शॉर्टकट / शेल लिंक के साथ काम करने के बारे में एक अच्छा खंड है । ऊपर मेरा उदाहरण वहाँ और इस साइट से एक कसाई संस्करण है ।
उम्मीद है की वो मदद करदे!