PROCURAR .EXE NA LISTA DE PROCESSOS!
Salve! Salve!
Procuro uma dica ou um exemplo para saber se determinado programa esta sendo executado na lista de processos.
Pretendo usar a dica no win xp e no win 98se e se possivel no win nt tbem..
obrigado.
Procuro uma dica ou um exemplo para saber se determinado programa esta sendo executado na lista de processos.
Pretendo usar a dica no win xp e no win 98se e se possivel no win nt tbem..
obrigado.
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
If FindWindow(vbNullString, "Calculadora") = 0 Then MsgBox "Janela Não encontrada"
End Sub
Sim Cleverton você tem razão, interpretei mal a pergunta e nem ao menos analisei seu código. Fui infeliz em tentar indicar uma funcionalidade que não foi solicitada pelo HOCTAEDROM.
No entanto, no exemplo que postei ao remover a linha CloseProcess = TerminateProcess(hProcess, ByVal 0&) > 0 a funcionalidade fica identica ao seu post, e irá servir caso se deseje localizar um processo pelo nome do executável ao invés de pesquisar pelo caption da janela. Veja a seguir:
Aproveitando parte de seu código tambem é possÃÂÂvel deixá-lo com funcionalidade similar ao meu primeiro post, ou seja, encerrar uma aplicação pelo caption de uma janela.
Sendo assim, agorá tem-se 4 resposta nesse post:
a) localizando um processo pelo caption da janela;
n) encerrando um processo pelo caption de uma janela.
c) localizando um processo pelo nome do executável;
d) encerrando um processo pelo nome do executável;
No entanto, no exemplo que postei ao remover a linha CloseProcess = TerminateProcess(hProcess, ByVal 0&) > 0 a funcionalidade fica identica ao seu post, e irá servir caso se deseje localizar um processo pelo nome do executável ao invés de pesquisar pelo caption da janela. Veja a seguir:
Option Explicit
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_PATH
End Type
Public Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
(ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Public Declare Function ProcessFirst Lib "kernel32" _
Alias "Process32First" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function ProcessNext Lib "kernel32" _
Alias "Process32Next" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Public Declare Sub CloseHandle Lib "kernel32" _
(ByVal hPass As Long)
Public Function FindProcess(EXEName As String) As Boolean
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim hProcess As Long
FindProcess = 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)
FindProcess = True
Exit Do
End If
Loop While ProcessNext(hSnapShot, uProcess)
End If
Call CloseHandle(hSnapShot)
End Function
Aproveitando parte de seu código tambem é possÃÂÂvel deixá-lo com funcionalidade similar ao meu primeiro post, ou seja, encerrar uma aplicação pelo caption de uma janela.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE = &H10
Public Sub CloseProgram(ByVal Caption As String)
Dim Handle As Long
Handle = FindWindow(vbNullString, Caption)
If Handle = 0 Then Exit Sub
SendMessage Handle, WM_CLOSE, 0&, 0&
End Sub
Sendo assim, agorá tem-se 4 resposta nesse post:
a) localizando um processo pelo caption da janela;
n) encerrando um processo pelo caption de uma janela.
c) localizando um processo pelo nome do executável;
d) encerrando um processo pelo nome do executável;
Tópico encerrado , respostas não são mais permitidas