PDA

View Full Version : بستن یه Processes مثلا ( Explorer.exe ) از تو VB



The One
سه شنبه 08 فروردین 1385, 08:47 صبح
سلام دوستان عزیز : سال نو مبارک

اگه کسی یه راهنمایی در این مورد بهم بکنه ممنون میشم:بوس:

بستن یه Processes مثلا ( Explorer.exe ) از تو VB

Payman62
سه شنبه 08 فروردین 1385, 14:56 عصر
با Terminate میتونی ببندی.

Payman62
سه شنبه 08 فروردین 1385, 14:56 عصر
با Terminate میتونی ببندی.

Payman62
سه شنبه 08 فروردین 1385, 14:57 عصر
با Terminate میتونی ببندی.

Payman62
سه شنبه 08 فروردین 1385, 14:57 عصر
با Terminate میتونی ببندی.

Payman62
سه شنبه 08 فروردین 1385, 14:59 عصر
با Terminate میتونی ببندی.

Payman62
سه شنبه 08 فروردین 1385, 14:59 عصر
با Terminate میتونی ببندی.

mkbo_webmaster
جمعه 11 فروردین 1385, 12:25 عصر
با استفاده از توابع API به راحتی میتونید یک لیستی از process های سیستم را گرفته و پس از دریافت اشاره گر از explorer.exe با تابع دیگری اون رو به راحتی ببندید.
اگه خواستید دقیقا در موردش بدونید مجددا به همین تالار پیغام بدید تا به همین تالار بفرستم

vb341
جمعه 11 فروردین 1385, 19:51 عصر
دوست عزیز mkbo_webmaster لطفا اگر جوابی دارین مطرح کنین تا کلیه دوستانی که این گفتگو رو میبینن استفاده کنن

Payman62
جمعه 11 فروردین 1385, 20:02 عصر
mkbo_webmaster عادت دارن قبل از پاسخ رخصت میگیرن.

mohsengrisly
شنبه 12 فروردین 1385, 15:44 عصر
بااستفاده از توابع
GETCURRENT PROCESS,GET EIXT CODE PROCESS
می توان این کار را انجام داد

Payman62
شنبه 12 فروردین 1385, 20:43 عصر
GetExitCodeProcess برنامه خودتو میبنده. نه پروسه های دیگه رو.
TerminateProcess پروسه های دیگه رو میبنده.

mkbo_webmaster
شنبه 12 فروردین 1385, 21:58 عصر
با عرض معذرت داشتم دنبال کدهاش میگشتم. ببخشید !!!
فایل VB6 اون رو بصورت زیپ شده گذاشتم تا دانلود کنید.
کافیه تنها اسم فایل EXE رو در کد من تغییر بدید...
کدی که دادم ، کاملا درست نوشته شده ولی یه مشکل داره چون من هرچی تو سیستم خودم تست میکنم تا به مرحله بستن میرسه ، بدون اینکه PROCESS مربوطه رو ببنده تنها خود VB6 رو میبنده ، لطفا اگه اطلاعاتی در این ضمینه دارید. لطف کنید.
متشکر ...

mkbo_webmaster
شنبه 12 فروردین 1385, 22:00 عصر
فکر با توجه به گفته های آقای PAYAM62 اشکال کد من در TerminateProcess باشه.
لطفا ایشان بیشتر در مورد TerminateProcess و عملکرد کامل آن توضیح دهند.
البته اگه زحمتی نیست. چون من هیچ اطلاعاتی در مورد این تابع ندارم.
مرسی

Payman62
یک شنبه 13 فروردین 1385, 02:58 صبح
mkbo_webmaster لطفا قبل از پست دادن یه نگاهی به پست های قبل هم بندازید. من که گفته بودم GetExitCodeProcess برنامه خودتو میبنده.

یه تابع برات نوشتم که پروسه هارو میبنده. باید اسم پروسه رو تو تکس باکس بدی و کلیک کنی.

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Const TH32CS_SNAPALL = &HF
Const PROCESS_ALL_ACCESS = &H1F0FFF

Private Sub EndProcess(ProcessName As String)
Dim hSnapshot As Long
Dim processInfo As PROCESSENTRY32
Dim success As Long
Dim exeName As String

hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
processInfo.dwSize = Len(processInfo)
success = Process32First(hSnapshot, processInfo)

While success <> 0
exeName = Left(processInfo.szExeFile, InStr(processInfo.szExeFile, vbNullChar) - 1)
If UCase(exeName) = UCase(ProcessName) Then
ProcName = OpenProcess(PROCESS_ALL_ACCESS, 0&, processInfo.th32ProcessID)
TermVal = TerminateProcess(ProcName, 0&)
End If
success = Process32Next(hSnapshot, processInfo)
Wend
CloseHandle (hSnapshot)
End Sub

Private Sub Command1_Click()
EndProcess Text1.Text
End Sub

mkbo_webmaster
یک شنبه 13 فروردین 1385, 13:54 عصر
مرسی خیلی عالی بود. دقیقا من پس از ارسال پیغام قبل رفتم و فروم رو گشتم و یه برنامه که به نام process manager پیدا کردم. و از توش تقلب کردم و اون کدهای خودم رو که فرستاده بودم کمی تغییر دادم. دقیقا مثل کدهای شما ولی با input box ، میخواستم بفرستم که دیدم شما فرستادین. ضمنا برنامه API Guide رو هم پیدا کردم خیلی خیلی عالیه.
توابعی داخلش هستش که اصلا حتی توی کتابهای مرجع هم پیدا نمیشن.
ضمنا من این کد بالا و همینطور کد خودم که نوشته بودم رو امتحان کردم. هر دو عالیه ولی یه مشکل دارن هر دو شون اینکه اگه بخوای پراسس فایل اجرائی نورتون آنتی ویروس رو ببندی این کار انجام نخواهد شد !!! میدونید چرا ؟؟؟ من دارم دربارش تحقیق میکنم. لطفا اگه میدونید به ما هم بگید. مرسی

mkbo_webmaster
یک شنبه 13 فروردین 1385, 15:14 عصر
:متعجب: بچه ها من یه راه جدید دیگه برای اینکار یاد گرفتم که از طریق dos انجام میشه و خیلی خیلی جدیده.

کد زیر رو توی Run تو ویندوز میتونید بنویسید :

taskkill -f -t -im explorer.exe
کد زیر رو توی Visual Basic میتونید وارد کنید :

Call Shell("taskkill -f -t -im explorer.exe")

یه کم کنده ولی عالیه ، نه ؟

mkbo_webmaster
یک شنبه 13 فروردین 1385, 15:19 عصر
یکی توی اطاقهای مرتبط با این اطاق یه روش برای بستن از طریق sendkeys گفته بود و یکی دیگه هم اشکالی از اون گرفته بود.
در جواب ایشون باید بگم که باید پس از اجرای taskmanager در ویندوز با shell باید کلیدهای
ctrl + home رو با sendkey زده و بعد دو بار کلیدهای CTRL + TAB رو بزنه تا وارد برگه process بشه ، اینطوری مطمئن تره ، و بعد از کلیدهای میانبر برای بستن process مربوطه استفاده کنه ولی باز هم میگم این روش اصلا خوب نیست. و حتی به نظر من روش dos قبل هم کامل نیست،
بهترین راه همون API هستش که من و آقای payam62 گفتیم.

Payman62
دوشنبه 14 فروردین 1385, 02:42 صبح
من این کد بالا و همینطور کد خودم که نوشته بودم رو امتحان کردم. هر دو عالیه ولی یه مشکل دارن هر دو شون اینکه اگه بخوای پراسس فایل اجرائی نورتون آنتی ویروس رو ببندی این کار انجام نخواهد شد !!! میدونید چرا ؟؟؟ من دارم دربارش تحقیق میکنم. لطفا اگه میدونید به ما هم بگید. مرسی
چون خیلی از پروسه های نرتون سرویس هستند و این کدی که من گذاشتم فقط پروسه های معمولی رو میبنده نه سرویس هارو. البته این کد ممکنه پروسه های معمولی نرتون رو هم نتونه ببنده. دیدین که موقع بستن از تو تسکمنجر هم access is denied میده. نرتون این کارو کرده که تروجان ها نبندنش.

بچه ها من یه راه جدید دیگه برای اینکار یاد گرفتم که از طریق dos انجام میشه و خیلی خیلی جدیده.
دستورات dos جدید نیستند.Tskill هم مثل Taskkill پروسه هارو میبنده. یه عمره این فایل ها تو سیستم32 هستند ولی سعی کن تا میتونی از دستورات داس استفاده نکنی و با API ها و امکانات خود vb کارو پیش ببری. کلا خوب نیست برنامه به فایل دیگه ای وابسته باشه. منم قبلا با داس پروسه هارو میبستم ولی اصلا از این روش خوشم نمیومد. این بود که API مربوطه رو یاد گرفتم.
راستی دستورات داس مثل Taskkill یا Tskill هم سرویس رو میبندن هم پروسه های معمولی رو.