Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

overload

Matar processo na lista de processos do Windows

Recommended Posts

Bom dia galera.

 

Tenho uma rotina que "mata" os procesos de um determinado executável da lista de processos ativos do windows. Porém, se existir mais de um processos rodando (do mesmo executavel) ele "mata" apenas um. Gostaria de saber como fazer para derrubar todos os processos do mesmo .exe

 

A rotina está abaixo... se alguém puder me ajudar, por favor...

 

Um abraço!!

 

Public Const TH32CS_SNAPPROCESS As Long = 2&Public Const MAX_PATH As Long = 260

Public 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_PATHEnd Type

Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFFPublic Declare Function CreateToolhelp32Snapshot Lib "kernel32" _  (ByVal lFlags As Long, ByVal lProcessID As Long) As LongPublic Declare Function ProcessFirst Lib "kernel32" _   Alias "Process32First" _  (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Function ProcessNext Lib "kernel32" _   Alias "Process32Next" _  (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Function OpenProcess Lib "kernel32" _  (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _   ByVal dwProcessId As Long) As LongPublic Declare Function TerminateProcess Lib "kernel32" _  (ByVal hProcess As Long, ByVal uExitCode As Long) As LongPublic Declare Sub CloseHandle Lib "kernel32" _  (ByVal hPass As Long)

Public Function CloseProcess(EXEName As String) As Boolean  Dim hSnapShot  As Long  Dim uProcess   As PROCESSENTRY32  Dim hProcess   As Long  CloseProcess = False  hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)  If hSnapShot = -1 Then Exit Function  uProcess.dwSize = Len(uProcess)  If ProcessFirst(hSnapShot, uProcess) = 1 Then     Do        If LCase$(Left$(uProcess.szExeFile, InStr(1, uProcess.szExeFile, vbNullChar) - 1)) = LCase$(EXEName) Then           hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)           CloseProcess = TerminateProcess(hProcess, ByVal 0&) > 0           Exit Do        End If     Loop While ProcessNext(hSnapShot, uProcess)  End If  'Call CloseHandle(hSnapShot)End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um loop que verifica sem o executavel ta aberto (usando API FindWindow), se tiver você fecha:

API:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Loop:

while FindWindow(vbNullString, "titulo_da_barra_de_titulo_do_executavel") <> 0       'mata o processo    Wend

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.