2008-10-15 9 views
14

मैंने अपने टेक्स्ट एडिटर में विभिन्न चीजों को करने में मेरी सहायता के लिए विंडोज SendMessage विधि का सफलतापूर्वक उपयोग किया है, लेकिन हर बार जब मैं दूसरों द्वारा सुझाए गए कोड की प्रतिलिपि बना रहा हूं और चिपका रहा हूं, और मुझे वास्तव में यह नहीं पता कि इसका क्या अर्थ है। हमेशा एक गुप्त संदेश संख्या होती है जो एक पैरामीटर है। मुझे कैसे पता चलेगा कि इन कोड संख्याओं का क्या मतलब है ताकि मैं वास्तव में समझ सकूं कि क्या हो रहा है और (उम्मीद है) भविष्य में थोड़ी अधिक आत्मनिर्भर हो? धन्यवाद।SendMessage संदेश संख्या का स्पष्टीकरण?

हाल उदाहरण:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam); 

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1)); 

उत्तर

3

यह विंडोज़ संदेश कोड है।
उन्हें हेडर फाइलों में परिभाषित किया गया है, और आम तौर पर अलग-अलग भाषाओं के साथ किसी प्रकार के रूप में अनुवादित किया जाता है।

उदाहरण:
WM_MOUSEMOVE = & H200
MK_CONTROL = & H8
MK_LBUTTON = & एच 1
MK_MBUTTON = & एच 10
MK_RBUTTON = & एच 2
MK_SHIFT = & एच 4
MK_XBUTTON1 = & एच 20
एमके_एक्सबूटन 2 = & एच 40

http://msdn.microsoft.com/en-us/library/ms644927(VS.85).aspx#windows_messages देखें।

3

विंडोज़ में प्रत्येक संदेश को एक संख्या द्वारा इंगित किया जाता है। देशी कोड में विंडोज एसडीके का उपयोग करते समय कोडिंग करते समय, इन्हें WM_CHAR, WM_PAINT, या LVM_GETCOUNT जैसे परिभाषित किया जाता है, लेकिन इन परिभाषाओं को .NET Framework पर नहीं ले जाया जाता है क्योंकि अधिकांश भाग में, संदेश .NET ईवेंट द्वारा लिपटे होते हैं OnKeyPressed और OnPaint, या ListView.Items.Count जैसी विधियों और गुणों की तरह।

इस अवसर पर जहां कोई लपेटा हुआ ईवेंट, संपत्ति या विधि नहीं है, या आपको उच्च स्तर पर समर्थित कुछ ऐसा करने की आवश्यकता नहीं है, तो आपको उस संदेश संख्या की आवश्यकता है जो विंडोज .NET Framework के नीचे उपयोग करता है।

विंडोज एसडीके शीर्षकों को देखने और उस नंबर की परिभाषा को देखने के लिए वास्तव में एक विशेष संख्या का मतलब यह जानने का सबसे अच्छा तरीका है।

0

PInvoke interop Assistant आज़माएं। इस टूल में एक खोज कार्यक्षमता है जो आपको सभी परिभाषित विंडोज संदेशों के माध्यम से ब्राउज़ करने की अनुमति देती है। इसके बाद यह उन मानों के लिए सही सी #/वीबी.Net कोड उत्पन्न करेगा।

यह केवल स्थिर मानों तक ही सीमित नहीं है। यह structs, कार्यों, समारोह पॉइंटर्स और enums भी उत्पन्न कर सकते हैं।

2

शायद आपको http://www.codeproject.com/KB/cs/cswindowsmessages.aspx पर कोड मिल जाएगा। यह कई सामान्य विंडोज संदेशों की सी # गणना प्रदान करता है।

+0

यदि आप कहीं से + पेस्ट काटते हैं, तो स्रोत को भी क्रेडिट करना अच्छा होता है –

1

इंटरनेट पर मिले सभी उदाहरणों में से, यह सबसे अच्छा है क्योंकि यह केवल एकमात्र ऐसा है जो using System.Runtime.InteropServices दिखाने का ख्याल रखता है। इस निर्देश के बिना मैं सी # में SendMessage काम नहीं कर सका। इस पृष्ठ की पेशकश वाले विंडोज संदेशों की सूची भी बहुत उपयोगी है। यहां मैं उदाहरण दोहराता हूं:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam); 

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1)); 
संबंधित मुद्दे