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

اريد شرح دالة SendMessage ضروري

مغلق
بدأه Amir Imam في 28 مايو 2007 · 9 رد · 1,323 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله

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

اشهد الله اني منذ ان دخلت الهذا المنتدى وقد حصلت على الكثير من الفوائد

وها انا اعود بطلب جديد (ارجو الا يضايقكم كثرة طلباتي) وهذه المرة هو طلب شرح دالة من دوال API

الدالة SendMessage ارى ان استخداماتها كثيرة جدا وعديدة وفي مجالات كثيرة

لذا ارجو من الخبراء والمحترفين وهم كثيرون في هذا المنتدى ارجو ان يشرحو لي هذه الدالة شرحا وافيا مفصلا

بكل متغيراتها والــConstants الخاصة بها او التي يمكن ان تتعامل معها

وجزاكم الله خيرا

#2

أولاً ما وظيفتها ؟؟؟

ثانياً : أنا جبتلك طريقة الإعلان عنها

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#3
دروس متقدمة في الـ API نبدؤها بـ SubClassing

تم تعديل هذه المشاركة بواسطة A7med_prof في 28 مايو 2007 في 20:08

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#4

تسمع عن حاجة أسمها رسائل النوافذ بنظام التشغيل Windows أو ( Window messages ) , شوف الموضوع ده هيفيدك : فكرة عن ال Subclassing

سؤاء بدالة SendMessage أو PostMessage فأنت تقدر تبعت رسالة ما الى نافذة ما عن طريق معرفة المقبض الخاص بتلك النافذة.

الأول نشوف الـ Parameters باعة الدالة :

hwnd هو مقبض النافذة الهدف.

wMsg الرسالة المطلوب أرسالها.

wParam و lParam هما 2 Parameters بنستعملهم لأرسال معطيات أضافية للنافذة الهدف.

SendMessage WinWnd, WM_CLOSE, 0&, 0&

هنا النافذة صاحبة المقبض اللى خزناه بالمتغير WinWnd هتستقبل رسالة قيمتها &H10 (طبعا بنعرفها الأول) علشان تفقل WM_CLOSE

عدد الرسائل كبير جدا جدا جدا , هتلاقيهم على الـ API Viewer بتاع الـ KPD Team

أما عن الـ wParam و lParam فأحسن مكان بيتكلم عنهم هو الـ MSDN

الفرق بين Post و Send هنا : اريد شرح لاجزاء من دالة sendmessage

تم تعديل هذه المشاركة بواسطة msayed2004 في 28 مايو 2007 في 20:10

#5

تفضل أخي , مشروع متواضع :

أنا لم افهم الدالة جيداً

Ala2_VB_Work_with_SendMessage_API.rar

تم تعديل هذه المشاركة بواسطة Ala2 VB في 28 مايو 2007 في 20:14

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#6
عبد القادر حجار كتب:
حتى تستطيع وندوز مخاطبة البرامج و حتى تستطيع النوافذ التخاطب مع بعضها و حتى تستطيع وندوز إخبار النوافذ بالأحداث التي تقع عليها من حركة الماوس أو النقر أو لتنفيذ أوامر كالنسخ و القص أو حتى إغلاق النافذة، أوجدت إمكانية إرسال الرسائل للنوافذ .

مثلاً حتى تغلق نافذة عليك إرسال رسالة الـ WM_CLOSE إلى النافذة المحددة و هذه النافذة ستقوم بإغلاق نفسها.

الدالات المستخدمة لإرسال الرسائل هما: PostMessage و SendMessage و الفرق بينهما هو أن الأولى سترسل الرسالة إلى طابور (رتل) الرسائل للنافذة المحددة بينما الثانية تنتظر معالجة الرسالة من قبل النافذة الهدف.

و الدالتان فيما عدى ذلك متشابهتان فما ينطبق على أحدهما ينطبق على الأخرى.

الدالة الأولى يتم تعريفها عبر:

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

بارامترات الدالة:

. hwnd مقبض النافذة التي تريد إرسال رسالة لها.

لجلب المقبض هذا هناك عدة حالات : 1) النافذة هي عنصر في برنامجك عندها المقبض يكون في خاصية النافذة (العنصر) المحدد CONTROLNAME.hwnd.

2) النافذة تقع خارج التطبيق :نستخدم البحث FindWindow إن كنا نعرف عنوان النافذة أو نستخدم FindWindowEX للبحث عن نافذة ابن داخل نافذة أب. إذا كنا نعرف اسم الـ Class للنافذة أو عنوانها.

. wMsg (متغير رقمي Long) الرسالة التي تريد إرسالها مثلاً WM_CLOSE انتبه يجب أن تكون قد أعلنت عن هذا الثابت و أسندت له قيمته الحقيقية Public Const WM_CLOSE =16.

إن كنت تريد استخدام رسائل خاصة بتطبيقك فيجب أن تكون قيمتها أكبر من قيمة الـ WM_USER و التي هي بالهيكس &H400 أو 1024 كقيمة رقمية.

. wParam بارامترات الأمر إن وجدت و إلا فأرسل صفراً 0.

. lParam بارامترات أخرى إضافية إن وجدت.

لا بد و أنك تستفسر ماهي الـ SubClassing .

إن ترجمناها حرفياً فهي التصنيف الفرعي و مبدأها بأن تعمل مقاطعة للرسائل التي يتم إرسالها إلى نوافذك و معالجتها و بالتالي ستحصل على تحكم أكبر بكثير و ستتجاوز محدودية الفيجوال بيسك في بعض الأمور، الطريقة ليست صعبة و لكن استعمالها محفوف بالمخاطر و ستعلم السبب لاحقاً .

في الدروس القادمة سنأخذ أمثلة عن إرسال الرسائل و ثم ننتقل إلى دالة جلب و تغيير شكل و خصائص نموذج SetWindowLong و GetWindowLong و أخيراً سنعطي طريقة الـ SubClassing لأنها ستعتمد على ما أعطيناه.

تحياتي

للأفاده

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#7

بسم الله

شكرا يا اخواني على الرد السريع والعظيم

كده يعتبر اني قطعت نصف الشوط

باقي اني اعرف الرسائل دي ممكن تعمل ايه ,وايه هي بالظبط

وزي ما قال الاخ msayed2004 ان عدد الرسائل كبير جدا بس بصراحة انا مفهمتش حاجة من الموقع اللي ادتهوني

فياريت شوية توضيح او اي حاجة تانية

او ممكن شرح لاشهر الرسائل

وجزاكم الله خيرا

#8

بسم الله

الاخ msayed2004

انا اتعاملت مع الموقع شكرا لك

ولكن اعرف ازاي برضو الرسائل الخاصة بالدالة والتعامل معاها؟

افادكم الله

#9

بسم الله

اقدر اقول ان كل رسائل الدالة SendMessage هي اللي أولها WM_ ?

يعني اي Constants اولها WM تبقى تبع الدالة دي ؟ ولا ملاحظه غلط

#10

نزل من الموقع بتاعهم الـ API Viewer بتاعهم , أما عن بداية الرسائل فى الى الآن لم أرى رسالة بتبدأ بغير كده , لاحظ أن أسم الثابت مش مشكلة المهم القيمة بتاعته.

أما عن أهمية رسالة معينة فزى ما قلت لك أبحث بالـ MSDN

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

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