View Full Version : سوال: روش EndTask کردن برنامه تسک منیجر
Mask
پنج شنبه 13 مرداد 1390, 21:12 عصر
با سلام.
مطمئنا برنامه تسک منیجر رو همه دیدیم.
چطوری میشه یه برنامه رو شبیه به تسک منیجر End Task کرد.
ممنون.
Felony
پنج شنبه 13 مرداد 1390, 22:07 عصر
منظورتون چیه ؟
Mask
پنج شنبه 13 مرداد 1390, 22:13 عصر
یه برنامه باز کنید.
از تب application برنامه تسک منیجر برنامتون رو انتخاب کنید و روی دکمه End Task کلیک کنید.
برنامه چون در حال اجراست . پنجره end task میاد و باکلیک بر روی end now برنامه بسته میشه.
من کد دکمه end task رو میخام. همین.:لبخند:
Felony
پنج شنبه 13 مرداد 1390, 22:52 عصر
اولا اون مورد برای ویندوز XP بود !
دوما :
برنامه چون در حال اجراست . پنجره end task میاد
برنامه اگر در حال اجرا نبود تو تب Application نمایش داده نمیشد !
من کد دکمه end task رو میخام. همین.
من 2 سالی میشه با XP کار نکردم ، تا جایی که یادمه با کلیک روی End Task یه پیغام نمایش داده میشد که با زدن End Now برنامه بسته میشد ، حالا کد چیش رو میخواین من نمیدونم !
یوسف زالی
جمعه 14 مرداد 1390, 00:52 صبح
سلام.
تا جایی که خبر دارم ویندوز از برنامه TaskKill در شاخه system32 استفاده می کنه.
یعنی اون رو فراخوانی می کنه.
?/ taskkill
vcldeveloper
جمعه 14 مرداد 1390, 03:06 صبح
پنجره اصلی برنامه مربوطه ابتدا یه پیام WM_CLOSE دریافت میکنه، اگر بهش پاسخ داد و کارش رو خاتمه داد، که هیچی؛ اگر جواب درست و حسابی نداد: تابع TerminateProcess.
هر دو حالتش در ProcessInfo پیاده سازی شده، می تونید در سورس کدش ببینید (متدهای CloseProcess و TerminateProcess).
Mask
شنبه 15 مرداد 1390, 21:00 عصر
پنجره اصلی برنامه مربوطه ابتدا یه پیام WM_CLOSE دریافت میکنه، اگر بهش پاسخ داد و کارش رو خاتمه داد، که هیچی؛ اگر جواب درست و حسابی نداد: تابع TerminateProcess.
هر دو حالتش در ProcessInfo پیاده سازی شده، می تونید در سورس کدش ببینید (متدهای CloseProcess و TerminateProcess).
ممنون.
در سمپل کنار کامپوننتتون یه دکمه به نام end task گذاشتید کار نمیده.منظورتون همینه؟
در ضمن منظورم اینه که بعد از end task کردن برنامه عکس زیر میاد.
drstrike
یک شنبه 16 مرداد 1390, 00:09 صبح
اگه نمیخوای این پیغام نمایش داده شه دستور زیر رو تو یک بچ فایل ذخیره کن:
taskkill /f /im explorer.exe
بعد با تابع ShellExecute اون اجرا کن.
setroyd
یک شنبه 16 مرداد 1390, 00:28 صبح
اینم برای بستن برنامه ها از اون روشی که دوستمون گفتن هم میشه ولی این بهتره
vcldeveloper
یک شنبه 16 مرداد 1390, 01:33 صبح
در سمپل کنار کامپوننتتون یه دکمه به نام end task گذاشتید کار نمیده.منظورتون همینه؟
بخش مربوط به Application اون Demo خیلی وقته که آپدیت نشده. اون دکمه End Task هم گزینه انتخاب شده در لیست Processes را میبنده، نه در لیست Applications. البته می تونید با یک خط کد، بهش بگید که اگر تب Applications فعال بود، گزینه انتخاب شده در لیست Applications رو ببنده. در هر حال، اون قابلیت End Task بدون مشکل کار میکنه. با همون کد فعلی Demo مربوطه، یک Process را از لیست Processes انتخاب کنید، و End Task رو بزنید، برنامه بلافاصله بسته میشه.
در ضمن منظورم اینه که بعد از end task کردن برنامه عکس زیر میاد.
پیام WM_CLOSE ارسال کرده به برنامه، و منتظر پردازش پیام شده، برنامه عکس العمل نشون نداده، این پیغام رو نشون داده. این بار اگر کاربر End Now رو بزنه، به جای ارسال پیام، مستقیما TerminateProcess فراخوانی میشه، و برنامه به زور بسته میشه، فرصتی هم بهش داده نمیشه.
Mask
سه شنبه 18 مرداد 1390, 16:14 عصر
پیام WM_CLOSE ارسال کرده به برنامه، و منتظر پردازش پیام شده، برنامه عکس العمل نشون نداده، این پیغام رو نشون داده. این بار اگر کاربر End Now رو بزنه، به جای ارسال پیام، مستقیما TerminateProcess فراخوانی میشه، و برنامه به زور بسته میشه، فرصتی هم بهش داده نمیشه.
ممنون.
اما من پیغام wm_close ر در برنامم هندل میکنم و مقدارش رو nul میکنم. اما بازم اون پنجره که end now داره میاد.
کلا مشکلم اینه که چیکار باید کنم که کاربر نتونه برنامم رو با کلیک بر روی end task ببنده.
ممنون.
vcldeveloper
چهارشنبه 19 مرداد 1390, 01:16 صبح
اما من پیغام wm_close ر در برنامم هندل میکنم و مقدارش رو nul میکنم. اما بازم اون پنجره که end now داره میاد.هندل کردن شما چه فایده ایی داره؟! من میگم WM_CLOSE ارسال میکنه، اگر برنامه در مدت زمان تعیین شده خودش را نبنده، TerminateProcess میکنه؛ خب شما WM_CLOSE رو هندل کنید، میخواد چی بشه؟ برنامه متوجه درخواست بسته شدن نمیشه، در نتیجه بعد از اتمام زمان تعیین شده توسط ویندوز، TerminateProcess فراخوانی میشه. TerminateProcess هم در User Mode تقریبا چیزی جلودارش نیست؛ اگر برنامه ایی TerminateProcess را فراخوانی کنه، به شرطی که مجوزهای لازم برای بستن یک برنامه را داشته باشه، اون برنامه به زور بسته میشه.
برای اینکه یک برنامه با TerminateProcess بسته نشه، یک برنامه باید این تابع را هوک کنه، تا قبل از اجرای این تابع مطلع بشه، و مانع از اجرای تابع بشه. هوک کردن توابع API ویندوز هم انواع مختلفی داره، و یک بحث مفصل و پیچیده هست. در اینترنت مثال ها و مقالات مختلفی درباره اش پیدا میشه.
کلا مشکلم اینه که چیکار باید کنم که کاربر نتونه برنامم رو با کلیک بر روی end task ببنده.این با سوال پست قبلی فرق داره.
Mask
چهارشنبه 19 مرداد 1390, 12:42 عصر
ممنون از استاد عزیز
من تصورم این بود که وقتی کاری کنم که برنامم درباره wm_close عکس العملی نشون ، دیگه TerminateProcess در کار نیست.
اما با توضیحاتی که فرمودید متوجه شدم ، بعد از ارسال wm_close توسط ویندوز، ویندوز منتظر میشینه که برنامه بسته بشه و وقتی مدت زمانی طی شد، تابع TerminateProcess رو فراخوانی و برنامم رو میبنده.
الان باید TerminateProcess رو هوک کنم و نتیجه رو ببینم.
به هر حال ممنون از راهنماییتون.
Mask
چهارشنبه 19 مرداد 1390, 14:56 عصر
سلام مجدد
تابع TerminateProcess رو هوک کردم.اما بازم برنامم با کلیک بر روی END NOW بسته شد.
یه تحقیقی کردم و فهمیدم با کلیک بر روی END NOW پیغام WM_QUERYENDSESSION به برنامه ارسال میشه.
نظرتون چیه؟
vcldeveloper
جمعه 21 مرداد 1390, 02:14 صبح
یه تحقیقی کردم و فهمیدم با کلیک بر روی END NOW پیغام WM_QUERYENDSESSION به برنامه ارسال میشه.
نظرتون چیه؟
نه، WM_QUERYENDSESSION زمانی ارسال میشه که ویندوز در حال Log off باشه. وقتی ویندوز داره Log off میکنه، این پیام رو به برنامه های در حال اجرا ارسال میکنه که کارشون رو تموم کنند. اگر برنامه ایی در زمان مشخص شده واکنش مناسبی نشان نده، یک پنجره شامل یک دکمه End now به کاربر نمایش داده میشه که کاربر میتونه تعیین کنه، آیا ویندوز باید منتظر اتمام کار اون برنامه باشه، یا اینکه برنامه به زور بسته بشه. این ربطی به بسته شدن برنامه با استفاده از Task Manager نداره.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.