PDA

View Full Version : سوال: یه سوال ساده راجبه End Process کردن EXPLORER ( ؟؟؟؟ )



DoctorJay
دوشنبه 28 مرداد 1387, 03:13 صبح
اگه ما از توی برنامه بوسیله ی دستور

Shell "taskkill -f -t -im EXPLORER.EXE"

EXPLORER.EXE رو بستیم, بعد چجوری میشه مجددا اونرو اجرا کرد ؟؟

من که تست کردم بعد از بستن EXPLORER خود برنامه رو هم بست و Timerی که

اونو دوباره اجرا میکرد عمل نکرد !!

scarce
دوشنبه 28 مرداد 1387, 08:58 صبح
سلام دوست من

برای اینکار کافی هست از دستور زیر استفاده کنی.





Shell "Explorer.exe"

xxxxx_xxxxx
دوشنبه 28 مرداد 1387, 08:59 صبح
معمولا با End Process كردن Explorer خودش دوباره باز ميشه ولي اگه نشد:



shell "Explorer.exe"

مهران رسا
دوشنبه 28 مرداد 1387, 10:07 صبح
وقتی برنامه بسته بشه چطور میشه از دستور Shell استفاده کرد ؟!!

دکتر درست میگن !!. وقتی با Taskkill ، پروسه explorer.exe رو ببندیم . خود برنامه هم بسته میشه .

2 تا راه وجود داره : یکی اینکه اسم فایل exe برنامه رو به یکی از اسم های LSASS.EXE - SMSS.EXE - CSRSS.EXE - SERVICES.EXE تغییر بدیم .

راه دوم اینه که از فایل Bat کمکی استفاده کنیم .

xxxxx_xxxxx
دوشنبه 28 مرداد 1387, 10:15 صبح
اما من وقتي Explorer.exe رو kill برنامه باقي مي مونه.

مهران رسا
دوشنبه 28 مرداد 1387, 10:36 صبح
دستور زیر رو در رویداد Load بنویسید :


Shell "Taskkill -f -t -im explorer.exe"

فایل exe رو ایجاد و اجرا کنید و نتیجه رو ببینید ‍!

scarce
دوشنبه 28 مرداد 1387, 19:58 عصر
منظورتون رو واضع تر بفرمایید شما نمی خواین که برنامه شما با Task Manager بسته بشه درسته ؟

DoctorJay
سه شنبه 29 مرداد 1387, 01:26 صبح
اما من وقتي Explorer.exe رو kill برنامه باقي مي مونه.

از توی برنامه هم امتحان کن, اونوقت متوجه منظورم میشین .



راه دوم اینه که از فایل Bat کمکی استفاده کنیم .

بالاخره باید اون فایل Bat. از یه جایی فراخوانی شه یا نه !! وقتی برنامه بسته شده چجوری میشه

یه دستور رو که همون اجرای فایل bat. هست رو اجرا کرد !!!!

مهران رسا
سه شنبه 29 مرداد 1387, 10:38 صبح
این ربطی به رویداد Load نداره !!


دکتر جان من اون پست رو در جواب جناب xxxxx_xxxxx دادم . :گیج:

scarce
سه شنبه 29 مرداد 1387, 10:56 صبح
دکتر جون اگه می خواین سیستم دوباره بارگزاری بشه یا همون عمل Refresh به وجود بیاد این کد رو امتحان کنید .





Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long
Private Sub Command1_Click()
Time = Time
InvalidateRect 0&, 0&, False
End Sub

مهران رسا
سه شنبه 29 مرداد 1387, 11:03 صبح
راستی دکتر جان از فایل exe کمکی هم می تونی استفاده کنی .

DoctorJay
چهارشنبه 30 مرداد 1387, 01:19 صبح
eXeهای کمکی به هیچ وجه عملی نیستن !!

امتحان نکردم ولی می دونم وقتی که EXPLORER از حافظه خارج شد امکان اجرای دستور دیگه ای رو نداریم .

درسته که اجرای مجدد EXPLORER ارجاع داده میشه به EXE2 , ولی با بسته شدن EXPLORER دیگه

EXE2 وجود نخواهد داشت .

DoctorJay
چهارشنبه 30 مرداد 1387, 01:23 صبح
دکتر جون اگه می خواین سیستم دوباره بارگزاری بشه یا همون عمل Refresh به وجود بیاد این کد رو امتحان کنید .

جناب scarce (http://barnamenevis.org/forum/member.php?u=63081) هدفم از اینکار

ReFresh نیست . می خوام پنجره های موجود بسته شه ( Folders ) همچنین تغییرات ایجاد شده در

Registry اعمال بشه . . .

مهران رسا
چهارشنبه 30 مرداد 1387, 15:32 عصر
eXeهای کمکی به هیچ وجه عملی نیستن !!

امتحان نکردم ولی می دونم وقتی که EXPLORER از حافظه خارج شد امکان اجرای دستور دیگه ای رو نداریم .

درسته که اجرای مجدد EXPLORER ارجاع داده میشه به EXE2 , ولی با بسته شدن EXPLORER دیگه

EXE2 وجود نخواهد داشت .

حق با شماست !

این دیگه آخرین راهی بود که به ذهنم رسید :



Private Sub Command1_Click()
Shell "taskkill -f -t -im explorer.exe", vbHide
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
On Error Resume Next
If App.EXEName <> "LSASS" Then
FileCopy App.Path & "\" & App.EXEName & ".exe", "C:\LSASS.EXE"
Shell "C:\LSASS.EXE", vbNormalFocus
End
End If
End Sub
Private Sub Timer1_Timer()
Shell "explorer.exe", vbHide
Timer1.Enabled = False
End Sub

DoctorJay
شنبه 02 شهریور 1387, 01:09 صبح
پس بالاخره نتیجه این شد که یه کاری کنم که فایل End proccess نشه !!

Ok, من یه سورس دارم که به کمک یه DLL. کاری میکنه که به هیچ وجه من الوجوه برنامه End Proccess

نمیشه . از اون استفاده می کنم که نخوام یه فایل اضافی بسازم . شایدم ساختم البته, باید بشینم

حساب کتاب کنم . . .

بهرحال ممنونم مهران جان,

از سایر دوستان که راهنمایی هم کردن ممنونم .

این دکمه ی حل شده اینجا هم نبود !! پیداش کردین بگید یه سری به من بزنه :چشمک:

mansour01
شنبه 02 شهریور 1387, 03:03 صبح
خب با اینکه مسئله حل شده ، اما من با اون دوستی که گفت batch File بسازید موافقم .
شما وقتی این فایل رو اجرا کنید دستورات پشت سر هم اجرا میشن و مشکلی پیش نمیاد ( دستور اتمام پروسه اکسپلورر رو هم داخل همین فایل قرار بدید و نه از برنامه ).

اما مشکل اصلی دستورات شما چیه ! فکر کنم -t رو حذف کنید همه چیز درست بشه . شما با این دستور تمام زیر شاخه های و فرزندهایی که با Explorer اجرا شدن رو می بندید ، بدون این گزینه امتحان کنین .

DoctorJay
یک شنبه 03 شهریور 1387, 02:07 صبح
با تشکر فراوان از شما , فک می کنم حق با شما باشه .

از batch فایل استفاده کردم ولی اونجا هم چون از t- استفاده کرده بودم به همون سرنوشت دچار شد !!

فک میکنم عدم شناخت درست از دستور Taskkill باعث این اشتباه شد .

بازم ممنون جناب mansour01 (http://barnamenevis.org/forum/member.php?u=45744)

عضویتتون تو سایت برنامه نویس رو هم تبریک میگم , خوش اومدی رفیق (در واقع شروع فعالیتتون رو ) :لبخندساده: