الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عبارة ()SendMessage

مغلق
بدأه new.net في 6 يونيو 2005 · 13 رد · 936 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

اريد ان اعرف اية هيا عبارة

SendMessage

وكيف يمكن اعتراضها او التحكم بها

وايه الارقام الغريبة دى ..........(0xa1) التى توضع معها

ارجوا انكم تفهمونى دى حتى من كود وجدت الكود مكتوب فية العبارات دى

................................................................................................................................

{

case 0x0302: //WM_PASTE

case 0x0300: //WM_CUT

case 0x000C: //WM_SETTEXT

if (!IsCaretAtWritablePosition())

MoveCaretToEndOfText();

break;

case 0x0303: //WM_CLEAR

return;

}

base.WndProc(ref m);

قيل لى انها رسائل الويندوز ويمكن التحكم بها

ارجوا الافادة

وشكرا

switch(m.Msg)

#2

SendMessage عبارة عن احد دوال ال API، وهو يقوم بإرسال رسالة من رسائل ويندوز(وليس رسائل كالمستخدمة مثل net send)

أما بالنسبة للأرقام الغريبة، فهي أرقام بالنظام الست عشري ويتم استخدام 0x قبل الرقم حتى يتم توضيح انه رقم ست عشري

أنا أستخدمت SendMessage مع رسالة WM_CopyDate لأرسال بيانات من برنامج ويتم تلقيها في برنامج أخر، المثال الذي بنيته إستخدمت فيه دلفي وليس سي شارب، لكن ان كنت تود رؤية الكود فسوف أقوم بكتابته هنا

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

الAPI الشهيرة SendMessage يمكنك استخدامها في ال#C و تسمى Message.Create و تستخدم بالضبط مثل الSendMessage

تم تعديل الخطأ

تم تعديل هذه المشاركة بواسطة bashmohandes في 6 يونيو 2005 في 22:21

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

اعتقد حدث عندك لبس أخي bashmohandes، لا يوجد مكافئ في دوت نت ل SendMessage

أعتقد انك تقصد Messaging namespace وهو خاص ب Windows Message Queuing ، وليس إرسال رسائل ويندوز

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#5

لا لبس و لا حاجة الAPI موجود لها مكافئ في الdotnet و اسمها بالفعل Message.Create و ليس Message.Send و قد اخطأت فقط في كتابتها و تم تعديلها و هذا رابط على الMSDN يشرحها

http://msdn.microsoft.com/library/default....createtopic.asp

سلام

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

الذى ذكرته هوا Message Structure وهو يستخدم لتعريف Message وعمل Handle لها

أي يمكن إستقبال الرسائل التى يبعثها ويندوز لبرنامجك أو التى ترسل من برامج أخرى بإستخدام SendMessage،

لكن إن أردت رسالة رسالة من برنامجك لبرنامج أخر أو لويندوز، فلا يزال يلزمك إستخدام Send Message API

إن كان يمكن إرسال رسائل بطريقة دوت نت الرجاء إخباري، فلا زال إستخدام ال API مسيطر علي بعد سنوات من إستخدامه :D

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#7

الحقيقة انا استخدمتها من قبل اكثر من مرة و لكني نسيت ان بعد ان تقوم بعمل الMessage يجب عليك ان ترسلها :lol: باستخدام WndProc

و هذا مثال و تمت تجربته

IntPtr wparam = new IntPtr(0);
 	 IntPtr lparam = new IntPtr(0);
 	 int WM_CLOSE = 0x10;
 	 Message msg = Message.Create(this.Handle, WM_CLOSE, wparam, lparam);
 	 WndProc(ref msg);

هذا الكود يقوم بارسال الMessage WM_CLOSE للForm التي هو فيها و ستجد فعلا ان الForm أغلقت

و هذا الكود 100% dotnet

:lol:

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

السلام عليكم ورحمة الله وبركاتة

مشكور على الرد الجميل .....ولكن ممكن توضحوا بمثال

ويكون شى بعض قوة يعنى الكود دة المفروض انة PASTE CUT SETTEXT

case 0x0302: WM_PASTE

case 0x0300: WM_CUT

case 0x000C: WM_SETTEXT

وبعدين ازاى اعطرض رسالة فى الويندوز على ما سمعت ان كل امر فى

الويندوز على شكل رسالة ويمكن اعطرادها اوتغييرها

وارجوا الى يعرف يقول وما يبخل احد ويقول مش كلام عامل ذى كلام عامل زى كلام ...........................الجرائدلا يقدم ولا ياخر

وشكرا

#9

تمام أخي bashmohandes

أعتذر عن خطئي

لا أعلم لماذا لا يتم إستخدامها بدلا من SendMessage رأيت العديد من الامثلة في CodeProject وحتى موقع ميكروسوفت نفسها في msdn يستخدمو ال SendMessage في الامثلة

يبدو ان الكثير مثلي لازال يحب ال API مباشرة من غير طبقات :D

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#10
اقتباس
وبعدين ازاى اعطرض رسالة فى الويندوز على ما سمعت ان كل امر فى

الويندوز على شكل رسالة ويمكن اعطرادها اوتغييرها

ابحث عن استخدام الـ IMessageFilter ... وده Interface ... اعمل Implementation للدوال اللي جواه وهتلائي فيها دول على ماأتذكر من اللي انت عاوزها.

استنى بس لما أخلص امتحانات ... وهنكسر الدنيا مع بعض ان شاء الله :) .

تم تعديل هذه المشاركة بواسطة معتز شمس في 8 يونيو 2005 في 18:38

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#11

الله عليك اخ معتز شمس هو دة الكلام

..................................................(استنى بس لما أخلص امتحانات ... وهنكسر الدنيا مع بعض ان شاء الله )

احب كلام الناس الواسقة من نفسها جدا

انا كمان بامتحن وان شاء الله اخلص كمان اسبوع تقريبا

وانا برضو محضر شوية هدايا (اكواد) للمنتدى بمناسبة انتهاء العام الدراسى ويا ريت تقدم شىء عن الرسائل الى مطلع عينى دى

وشكرا مرة اخر اخ معتز شمس ............وعلى فكرة انا نسيت اشكرك على التعليم الصوت والصورة الاخير كان رائع

وشكرا

#12

العفو يا أبو علي .... وان شاء الله في الأجازه نعمل الحاجات اللي بنقول عليها دي :D

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#13

bashmohandes، هل جربت المثال السابق لاغلاق برنامج اخر؟ وليس البرنامج الذى انت به؟

انا كتبت هذا الكود لأجرب Message.Create ولكنها لا تغلق الا البرنامج الذى انا به، رغم اني امرر ال handle الخاص ببرنامج نوت باد، بينما SendMessage تعمل مع نفس الكود بدون مشاكل

  private void button1_Click(object sender, System.EventArgs e)
  {
 	 IntPtr wparam = new IntPtr(0);
 	 IntPtr lparam = new IntPtr(0);
 	 IntPtr x; 
 	 int WM_CLOSE = 0x10;
 	 System.Diagnostics.Process.Start("Notepad.exe");
 	 MessageBox.Show("Notepad running");
 	 x = FindWindow("Notepad",null);
 	 
 	 // unremark the next two lines to test Message.Create, but it will not close the notepad :-/
 	 //Message msg = Message.Create(x, WM_CLOSE, wparam, lparam);
 	 //WndProc(ref msg);
 	 // remark next line when you testing Message.Create
            SendMessage(x,0x10,IntPtr.Zero ,IntPtr.Zero);  
 	 
  }

بالنسبة للتعريفات

  [DllImport("user32.dll")] 
  public static extern IntPtr FindWindow( 
 	 string lpClassName,  // pointer to class name 
 	 string lpWindowName  // pointer to window name
  ); 
  
  [DllImport("user32.dll")] 
  public static extern int SendMessage( 
 	 IntPtr hWnd,    // handle of destination window
 	 uint Msg,     // message to send
 	 IntPtr wParam,	// first message parameter
 	 IntPtr lParam  // second message parameter
  );

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#14

الحقيقة لم اجرب لكن سأجرب و أرد عليك

Sr. Software Development Engineer
Hulu, LLC
My Blogs

هذا الموضوع مغلق.

مواضيع مشابهة