سلام بر دوستان عزیز
من یه مشکلی داشتم . من می خواستم یه برنامه درحال اجرا مثل اکسل را ببندم .
مثلا اگه برنامه اکسل را باز کنیم و کلیدهای Ctrl + Alt +Del را بزنیم و وارد سربرگ دوم Processes شویم اگه فایل EXCEL.EXE را end Processes کنیم برنامه اکسل بسته می شود . حال می خواستم بدانم که در ویژوال بیسیک 6 چگونه می توانم این فایل را end Processes کنم و در واقع برنامه اکسل باز را ببندم .
با تشکر از همکاری شما دوست عزیزم
از دوستان کسی نیست که بتونه مشکل من را حل کنه ؟
باید از تابع TerminateProcess استفاده کنید مثال هم که الی ماشااله همه جا هست
دوست عزيز
همونطور كه مبين گفت راه حل براي شما خيلي زياده، از اون بيشتر سورس كد و تابع آماده و ... هست ،هم مي شه با
استفاده از توابع API اين كار رو كرد هم با استفاده از دستور كيل پروسس تو محيط داس، اما دستورات API جذابيت بيشتري داره!!
كدهاي زير رو داخل يك ماژول كپي كن :
کد:
Private Const MAX_PATH As Long = 260
Private Const TH32CS_SNAPPROCESS = &H2&
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const PROCESS_TERMINATE As Long = (&H1)
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 * MAX_PATH
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpExitCode As Long) As Long
Sub KillProcess(ByVal sExeName As String)
Dim lSnapshot As Long, lNextProcess As Long
Dim tPE As PROCESSENTRY32
' Create Snapshot
lSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If lSnapshot <> -1 Then
tPE.dwSize = LenB(tPE)
' Find first process
lNextProcess = Process32First(lSnapshot, tPE)
Do While lNextProcess
' Find specified process
If UCase(sExeName) = UCase(Left(tPE.szExeFile, Len(sExeName))) And Len(sExeName) > 0 Then
Dim lProcess As Long
Dim lExitCode As Long
' Open Process
lProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_TERMINATE, False, tPE.th32ProcessID)
' Get Exitcode
GetExitCodeProcess lProcess, lExitCode
' Terminate Process
TerminateProcess lProcess, lExitCode
' Close Handle
CloseHandle (lProcess)
Exit Do
End If
lNextProcess = Process32Next(lSnapshot, tPE)
Loop
' Close Handle
CloseHandle (lProcess)
End If
End Sub
خوب حالا كافيه اسم هر پروسسي كه خواستي تو تابع بالا قرار بدي تا بسته بشه
کد:
KillProcess ("EXCEL.exe")
این روش هم جواب میده!
کد:
shell"tskill taskmgr"
بجای taskmgr اسم برنامه ای که قرار هست بسته بشه بنویسید!