PDA

View Full Version : Windows Message Queues



MSK
چهارشنبه 01 تیر 1384, 13:26 عصر
با سلام.

اگه راجع به این موضوع توضیح کامل بدید و در ادامه چندتا مثال جامع برای استفاده از توابع sendmessage,getmessage,waitmessage و امثالهم بزنید خیلی ممنون میشم!


:kaf:

محمد میرمصطفی
چهارشنبه 01 تیر 1384, 23:46 عصر
تو DOS برنامه نویسی بر پایه interruptها بود. مثلا int 19h سیستم رو restart می کرد.
ولی تو ویندوز برنامه نویسی بر پایه پیغامهاییه که بین برنامه ها و ویندوز رد و بدل می شه. مثلا برای creat یه application (و فرمهای مربوطه) از پیغام WM_CREATE استفاده می شه. یا برای ترسیم فرم (مثل وقتی که شئی از روی فرم رد بشه فرمان WM_PAINT میاید بعضی از پیغامها هم به درخواست خود برنامه میاد مثلا با تابع SetTimer برنامه از ویندوز می خواد که بعد از گذشت یه زمان مشخص پیغام WM_TIME براش بیاد.
برای گرفتن این پیغامها از سیستم، هر Application یه Message Loop دارره که هر پیغام که میاد رو تفسیر می کنه و ممکن message handler او پیغام رو call کنه. گاهی برنامه بخاطر کار سنگینی که داره میکنه دیگه توانایی نشون دادن عکس العمل به پیغامها رو نداره (مثل اجرای یه Query سنگین) در این صورت ویندوز به Caption فرم اصلی یا Modal اون عبارت Not Responding رو اضافه می کنه. راستی وظیفه دریافت و تفسیر پیغامها رو WndProc به عهده داره که با override اون میشه کنترل پیغامها رو در دست گرفت. البته همه کارها این نیست. Applicationها با فرمهاشون و Applicationهای دیگه هم می تونن با کمک همین پیغامهاارتاط برقرار کنن. اگه اطلاعات بیشتر میخوای بگو بگم. ولی من Biulderکار هستم و برام سخته که مثلا دلفی بزنم.

محمد میرمصطفی
چهارشنبه 01 تیر 1384, 23:50 عصر
فقط اینم بگم که:
برای ارسال پیغام باید Handle فرم هدف رئ بدونی (که معمولا با FindWindow پیدا می شه)
بعد پیغام.
دوتا هم پارامتر هر پیغام میتونه داشته باشه.

Inprise
پنج شنبه 02 تیر 1384, 01:34 صبح
Windows Message Queues با پیامهای داخلی ویندوز توابع مربوطه مطلقا" ارتباطی ندارند ؛

MSK
جمعه 03 تیر 1384, 12:12 عصر
جناب آقای inprise من که از هلپ دلفی استفاده می کردم این طور به نظر می رسید که مرتبط باشن!

به هر حال اگه شما هم یه راهنمایی در این زمینه به من بیسواد! بکنید خیلی ممنون میشم!!
::نوشتن::

MSK
جمعه 03 تیر 1384, 12:23 عصر
جناب آقای میر مصطفی از راهنمایی شما هم خیلی ممنون.

حالا دریافت من از این موضوع اینه که از این سیستم برای ارتباط داخلی دوبرنامه هم میشه استفاده کرد؟

ولی مشکلی که وجود داره اینه که چطور میشه مطمپن بود که کدی که مابرای برنامه دیگه ارسال کردیم اختصاصیه و تصادفا مثلا کد wm_close نیست؟

چند تا سوال دیگه هم دارم ولی اگه لطف کنید و فعلا به این سوالا جواب بدید که ذهنیت من راجع به این موضوع اصلاح بشه ممنون میشم.

MSK
شنبه 04 تیر 1384, 01:25 صبح
خوب مثل اینکه واسه دوتا سوال بالا جواب نبود.

حالا مشکل دیگه ای که دارم:

من توی یه برنامه یه loop ساختم و گفتم هرچی مسیج به فرم اصلی اومد نمایش بده.
در برنامه دیگری هم گفتم بهش یه مسیج خاص بده.

درست برنامه اول هنگام اجرای برنامه دوم نشون میداد بهش مسیج رسیده ولی شماره مسیج اونی که باید نبود!!؟

Inprise
شنبه 04 تیر 1384, 02:43 صبح
من جوابت رو دادم ؛ تو هر تاپیک هم باید یک سوال بپرسی ؛

خوش باشی