PDA

View Full Version : سوال: بستن برنامه دیگر با تابع CloseWindow



mbshareat
شنبه 02 دی 1391, 08:35 صبح
سلام
من هندل یه برنامه رو دارم . با برنامه آقا ماهان هم تست کردم شماره هندل درسته اما نمیدونم چرا نمیتونم با CloseWindow یا DestroyWindow ببندمش. راه حل چیه؟

mbshareat
شنبه 02 دی 1391, 08:43 صبح
علت کار نکردن دو تابع فوق رو نفهمیدم اما با این کد کار کرد SendMessage(H,WM_CLOSE,0,0);

Felony
شنبه 02 دی 1391, 11:08 صبح
اول تحقیق کن ببین تابع به چه دردی میخوره ! دلیل نمیشه که اسمش فلانه همون کاری که تو ذهن شماست بکنه ...

CloseWindow به نقل از MSDN :

Minimizes (but does not destroy) the specified window.

DestroyWindow اولا فقط زمانی کار میکنه که پنجره مورد نظر توسط همون تردی که تابع DestroyWindow رو توسطش صدا میزنید ساخته شده باشه ( پس نمیتونید پنجره مربوط به برنامه دیگه رو با این تابع بندید ) ، دوما فقط پنجره رو Destroy میکنه و کاری نداره پنجره Main Form برنامه شما هست یا نه ، بنابراین حتی اگر پنجره مورد نظر Main Form برنامه هم باشه پنجره بسته میشه ولی پروسه برنامتون در حافظه مقیم میونه و دلیل این مورد هم این هست که دلفی یک پنجره برای شئ Application میسازی که مخفی هست و برای یکسری کار مثل تنظیم Z-Order پنجره های برنامه پشت صحنه ازش استفاده میکنه که اون پنجره هنوز باز هست .

کار درست و فنی همونی هست که در پست 2 نوشتید ، اون کد پیغام WM_Close رو در Message Queue مربوط به Main Thread برنامه مقصد میزاره و هر وقت Thread مربوطه این پیغام رو پردازش کرد توسط روتین های مربوطه اشیا VCL و ... رو تخریب میکنه و حافظه های اختصاص داده شده به اون ها رو آزاد میکنه و کار بدون هیچ مشکلی تموم میشه .