PDA

View Full Version : بستن یک پنجره به صورت اجباری



subsub
جمعه 01 تیر 1386, 13:04 عصر
سلام
من می خوام یه پنجره که مال یه پروژه دیگه هست (اون پروژه به صورت Exe در اومده) رو ببندم. از DestroyWindow که یک API هست استفاده کردم. ولی بعضی از پنجره ها رو نیم تونه ببنده. چکار کنم که حتماً اون پنجره بسته بشه. (میدونم که بسته شدن اجباری یه پنجره ممکنه اثرات سوئی داشته باشه)

mehdi.mousavi
جمعه 01 تیر 1386, 13:46 عصر
سلام
من می خوام یه پنجره که مال یه پروژه دیگه هست (اون پروژه به صورت Exe در اومده) رو ببندم. از DestroyWindow که یک API هست استفاده کردم. ولی بعضی از پنجره ها رو نیم تونه ببنده. چکار کنم که حتماً اون پنجره بسته بشه. (میدونم که بسته شدن اجباری یه پنجره ممکنه اثرات سوئی داشته باشه)

سلام.
مگه شما Window رو با CreateWindow درست کردید که می خواهید با DestroyWindow ببندینش؟ راه درست استفاده از کلاس Process و متود CloseMainWindow هستش. به این ترتیب پیام WM_CLOSE به ویندو مورد نظرتون ارسال میشه، درست مثل اینکه کاربر اون ویندو رو از طریق X بالای پنجره بسته باشه. اگر برنامه ای که می خواهید ببندید، Window نداره، باید از متود Kill همین کلاس استفاده کنید. البته دقت کنید که اگر برنامه مورد نظر مثلا در حال کار کردن با درایوری باشه، بعد از متود Kill درایور در وضعیت ناپایداری قرار میگیره. برای همین استفاده از این متود رو در هیچ شرایطی توصیه نمیکنم.

subsub
جمعه 01 تیر 1386, 17:46 عصر
سلام.
مگه شما Window رو با CreateWindow درست کردید که می خواهید با DestroyWindow ببندینش؟ راه درست استفاده از کلاس Process و متود CloseMainWindow هستش. به این ترتیب پیام WM_CLOSE به ویندو مورد نظرتون ارسال میشه، درست مثل اینکه کاربر اون ویندو رو از طریق X بالای پنجره بسته باشه. اگر برنامه ای که می خواهید ببندید، Window نداره، باید از متود Kill همین کلاس استفاده کنید. البته دقت کنید که اگر برنامه مورد نظر مثلا در حال کار کردن با درایوری باشه، بعد از متود Kill درایور در وضعیت ناپایداری قرار میگیره. برای همین استفاده از این متود رو در هیچ شرایطی توصیه نمیکنم.

این پنجره مال یه برنامه هست که من به کدش دسترسی ندارم. نمی دونم با CreateWindow درست شده یا نه.
اون برنامه ای هم که می خوام ببندم، پنجره داره. ولی یه مشکل. این کلاس Process که شما میگید، کجا هست. من VB6 کار می کنم. فکر کنم شما دارید VB.net رو میگید.
اگه ممکنه بگید توی VB6 چکار کنم.

__siavash__
جمعه 01 تیر 1386, 18:28 عصر
با تابع FindWindow اونو پیدا کن بعد براش پیغام Close بفرست

mehdi.mousavi
شنبه 02 تیر 1386, 10:45 صبح
این پنجره مال یه برنامه هست که من به کدش دسترسی ندارم. نمی دونم با CreateWindow درست شده یا نه.
اون برنامه ای هم که می خوام ببندم، پنجره داره. ولی یه مشکل. این کلاس Process که شما میگید، کجا هست. من VB6 کار می کنم. فکر کنم شما دارید VB.net رو میگید.
اگه ممکنه بگید توی VB6 چکار کنم.

سلام.
اگه میخواهید Force کنید که خارج بشه برنامه (با توجه به اون چیزایی که گفتم) می تونید از Win32 API ها استفاده کنید. TerminateProcess این کارو براتون انجام میده. اما اگر میخواهید WM_CLOSE رو به برنامه بفرستید، ابتدا باید با FindWindow هندل به اون پنجره رو پیدا کنید، بعدش یه WM_CLOSE بهش Post کنید. (PostMessage).

subsub
شنبه 02 تیر 1386, 18:45 عصر
مشکل حل شد. از همگی ممنون