سؤال

ولقد استعملت بنجاح الأسلوب Windows 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));
هل كانت مفيدة؟

المحلول

وهذا هو رمز ويندوز الرسالة.
والوارد تعريفها في ملفات رأس، والمتاحة عموما كما ترجم التضمين من نوع ما مع لغات مختلفة.

وعلى سبيل المثال:
WM_MOUSEMOVE = & H200
MK_CONTROL = & H8
MK_LBUTTON = & H1
MK_MBUTTON = & H10
MK_RBUTTON = & H2
MK_SHIFT = & H4
MK_XBUTTON1 = & H20
MK_XBUTTON2 = & H40

http://msdn.microsoft كوم / EN-US / مكتبة / ms644927 (VS.85) .aspx اتصال # windows_messages .

نصائح أخرى

وتدل كل رسالة في ويندوز عن طريق رقم. عندما الترميز باستخدام SDK Windows في التعليمات البرمجية الأصلية، وتقدم هذه التي يعرف مثل WM_CHAR، WM_PAINT، أو LVM_GETCOUNT، ولكن لم يتم تنفيذ هذه يعرف أكثر من صافي الإطار لأنه في معظم الحالات، يتم تغليف الرسائل الأحداث. NET مثل OnKeyPressed وOnPaint، أو الأساليب والخصائص مثل ListView.Items.Count.

في هذه المناسبة حيث لا يوجد ملفوفة الحدث أو الممتلكات أو طريقة، أو ما عليك القيام به شيء غير معتمد على مستوى أعلى، وكنت في حاجة إلى أرقام الرسالة التي يستخدمها Windows تحت إطار .NET.

وأفضل طريقة لمعرفة ما يعني عدد معين الواقع هو أن ننظر في رؤوس ويندوز SDK والعثور على تعريف هذا العدد.

وربما ستجد رمز في http://www.codeproject.com /KB/cs/cswindowsmessages.aspx مفيدة. وهو يوفر C # تعداد العديد من الرسائل ويندوز المشتركة.

وبين جميع الأمثلة وجدت على شبكة الإنترنت، وهذا هو الأفضل لأنه هو الوحيد الذي يعتني تبين 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)); 

وجرب PInvoke إمكانية التشغيل المتداخل مساعد . هذه الأداة لديه وظيفة البحث التي تسمح لك لتصفح كافة الرسائل النوافذ محددة. وسوف ثم تولد الصحيح C # / VB.Net رمز لتلك القيم.

وكما انها لا تقتصر على القيم فقط ثابتة. كما يمكن أن تولد البنيات، وظائف، وظيفة مؤشرات وتتضمن التعدادات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top