2012-08-01 8 views
16

मेरे पास एक साधारण WPF एप्लिकेशन है और मुझे विंडोज़ (ऑपरेशन सिस्टम) में दबाए गए एफ 1 कुंजी को कैप्चर करने की आवश्यकता है, भले ही मेरी डब्ल्यूपीएफ विंडो कम हो, या यह सक्रिय नहीं है।ग्लोबल विंडोज कुंजी प्रेस

मुझे इसका पता लगाने में समस्याएं हैं। मैंने इंटरनेट पर खोज की और मुझे कई नतीजे मिले, लेकिन उन्होंने मेरी मदद नहीं की।

एक महत्वपूर्ण आवेदन के अंदर दबाया का पता लगाने के लिए मैं इस सरल कोड का इस्तेमाल किया:

AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)KeyPressed); 
private void KeyPressed(object sender, KeyEventArgs e) 
{ 
     if (e.Key == Key.F1) 
     { 
      //my code went here 
     } 
} 

लेकिन जब मेरी खिड़की सक्रिय नहीं है यह काम नहीं करता।

तो, मेरा प्रश्न है: वैश्विक कुंजी प्रेस का पता लगाने के लिए कैसे?

मैं दोहराता हूं: यह एक डब्ल्यूपीएफ एप्लीकेशन है।

उत्तर

21

Keyboard Hooking की कोई आवश्यकता नहीं है। Windows API से RegisterHotKey (सिस्टम-व्यापी हॉट कुंजी परिभाषित करता है) और UnregisterHotKey का उपयोग करें। pinvoke.net या कि यह शिक्षण सामग्री से सी # में इन उपयोग करके देखें:

Microsoft Forums में एक नमूना है।

आप इन संशोधक और Virtual-Key Codes उपयोग कर सकते हैं:

 
MOD_ALT  (0x0001) 
MOD_CONTROL (0x0002) 
MOD_NOREPEAT (0x4000) 
MOD_SHIFT (0x0004) 
MOD_WIN  (0x0008)

उदाहरण के लिए F1 कुंजी VK_F1 (0x70) है।

+1

क्या सुखद आश्चर्य है। एक बार जब मैं ग्लोबल हॉटकी थ्रेड पर आ जाता हूं और शीर्ष जवाब 'रजिस्टर होटकी' होता है और 'SetWindowsHookEx' नहीं होता है। – CodesInChaos

0

जब आपका आवेदन फ़ोकस में नहीं है - मैसगैम पंप को कुछ भी नहीं मिलेगा - आपको सिस्टम स्तर एपीआई को हुकिंग कुंजी के लिए उपयोग करने की आवश्यकता है। (SetWindowsHookEx पर जानकारी खोजने का प्रयास करें)

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^