2012-02-29 10 views
6

मेरे पास सिस्टम ट्रे में एक NotifyIcon है। जब उपयोगकर्ता ने उस पर बायाँ-क्लिक किया है तो मैं कैसे पता लगा सकता हूं? मुझे लगता है कि MouseDown ईवेंट वह होगा जो मैं उपयोग करना चाहता हूं लेकिन यह केवल दायाँ क्लिक और मध्य-बटन क्लिक को संभालता है। बाएं-क्लिक के लिए, उपयोगकर्ता ने जाने के बाद ही आग लगती है (जैसा कि उन्होंने अभी एक सामान्य क्लिक किया है)। क्या माउसडाउन ईवेंट केवल प्राप्त करने का कोई तरीका है?सूचित करता है आइकन में माउसडाउन समतुल्य है?

+1

मैंने कई चीजों की भी कोशिश की। तुमने मुझे उत्सुकता दी है। मैंने वहां भी कोशिश करने के लिए वीएस 11 स्थापित किया। कोई भाग्य नहीं। मैं लगभग एक बग सोचता हूँ। मुझे आशा है कि किसी के पास भी जवाब होगा। – JimDel

+1

मुझे लगता है कि यह इस तथ्य के साथ कुछ करने के लिए हो सकता है कि इसे खींचा जा सकता है (जिसे ऐप के बजाए विंडोज़ द्वारा ही नियंत्रित किया जाता है)। हो सकता है कि 'mousedown' घटना को ऐप पर बुलबुले करने के बजाए विंडोज़ द्वारा अवशोषित किया जा रहा हो। – Skoder

+1

तो यह [एमएसडीएन] पर है (http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.mousedown.aspx) पूरी तरह से गलत है? – Steve

उत्तर

4

यह डिज़ाइन द्वारा है, खोल अप ईवेंट से माउसडाउन संदेश को संश्लेषित करता है। जब आप बटन को क्लिक करके दबाएंगे और फिर ड्रैग करना शुरू करेंगे तो आप देखेंगे कि यह इस तरह क्यों काम करता है। ध्यान दें कि अधिसूचना क्षेत्र अतिप्रवाह विंडो कैसे पॉप अप करती है और दृश्यमान क्षेत्र से इसे हटाने के लिए आइकन को खींचने देती है। यह दोनों तरीकों से काम नहीं कर सकता है।

तकनीकी रूप से आप ExplorerWexEx() के साथ एक्सप्लोरर से पहले संदेशों पर एक क्रैक प्राप्त करने के लिए Explorer.exe के स्वामित्व वाली विंडो को हुक कर सकते हैं। हालांकि, एक प्रकार की डीएलएल की आवश्यकता है जिसे आप सी # में नहीं लिख सकते हैं, इसे एक्सप्लोरर में इंजेक्शन दिया जाना चाहिए। प्रतिस्पर्धा को हरा करने के लिए बहुत ही अस्थिर और कठिन है जो एक ही काम करने की कोशिश कर रहा है। इसके अलावा कोड की तरह जो माइक्रोसॉफ्ट एपकोपेट टीम के लिए नींद की रात का कारण बनती है।

3

ऐसा प्रतीत होता है अंतर्निहित Win32 एपीआई Shell_NotifyIcon एक WM_LBUTTONDOWN संदेश भेजता है कि जब उपयोगकर्ता क्लिक के आइकन। वैसे भी MSDN के अनुसार।

नोटिफ़िकॉन के लिए विंडोज फॉर्म स्रोत कोड की जांच करना मानक माउस डाउन इवेंट हैंडलिंग का खुलासा करता है, इसलिए अगर Win32 संदेश "सही" समय पर भेजा जा रहा था, तो यह काम करेगा/उम्मीद के रूप में काम करेगा।

मुझे पिछली टिप्पणी से सहमत होना है कि NotifyIcon WM_LBUTTONDOWN निगल जाएगा क्योंकि इसे माउस कैप्चर करने की आवश्यकता है ताकि उपयोगकर्ता आइकन को खींच सके।

यह संभव है कि this article WPF के लिए ट्रे आइकन बनाने के बारे में उपयोगी होगा क्योंकि यह दिखाता है कि 0 #आदि का उपयोग सी # से कैसे किया जाए।

+0

क्या इसका मतलब यह है कि मूसडाउन घटना को संभालने का कोई तरीका नहीं है क्योंकि यह डिज़ाइन द्वारा है? – Skoder

+0

मुझे नहीं लगता कि कोई आसान तरीका है। टास्कबार उन्हें संभालने से पहले WM_XXX संदेशों को निम्न स्तर (सी ++ में) पर हुक करना संभव हो सकता है, लेकिन ऐसा कुछ समय है जब मैंने ऐसा कुछ किया है। – Phil

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