Hola a todos mi duda seria esta
Me gustaria que mi proyecto comprobara si un proceso esta activo, por ejemplo, explorer.exe.
y si esta activo me de su ruta en por ejemplo un text.
llevo rato mirando pero no consigo encontrar la manera de hacerlo, aver si alguien puede ayudarme.
Saludos! ;D
Aquí una ayuda utilizando WMI:
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/14.htm
Con esto tienes de sobras para lo que quieres hacer.
Solo te faltará lo de mostrar la ruta, que en google podrás encontrar info.
HOLA!!!
En el foro hay mucho de eso, busca y vas a encontrar,,igual, ya te respondieron.
GRACIAS POR LEER!!!
WMI esta bien pero yo usaria api, siempre es lo mejor.
El problema esque nose como hacer el codigo para comprobar si el proceso existe y que muestre su ruta :S ya tenia codigos para mostrar y cerrar procesos...
aun asi gracias igualmente x la ayuda!
aver si alguien puede decirme algo, saludos ^^
Aqui tengo el code para ver si esta corriendo, alguien podria modificarlo para que coja ese mismo proceso y diga su ruta en el caso de que este corriendo?
gracias por la ayuda! :)
el code es este:
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String
NombreDelProceso = UCase$(NombreDelProceso)
ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(NombreDelProceso) Then
If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function
Private Sub Command1_Click()
If EstaCorriendo("calc.exe") = True Then
MsgBox "Esta Corriendo"
End If
If EstaCorriendo("calc.exe") = False Then
MsgBox "No esta Corriendo"
End If
End Sub
.
Function Ruta(lngPid As Long) As String
Dim Handle_Proceso As Long
Handle_Proceso = OpenProcess(&H410, &H0, lngPid)
Dim Buffer As String * 260
Call GetModuleFileNameExA(Handle_Proceso, &H0, Buffer, 260)
Call CloseHandle(Handle_Proceso)
Ruta = Split(Buffer, Chr$(0))(0)
End Function
lngPid = lProcesses(N)
Cita de: Hasseds en 19 Mayo 2011, 19:34 PM
.
Function Ruta(lngPid As Long) As String
Dim Handle_Proceso As Long
Handle_Proceso = OpenProcess(&H410, &H0, lngPid)
Dim Buffer As String * 260
Call GetModuleFileNameExA(Handle_Proceso, &H0, Buffer, 260)
Call CloseHandle(Handle_Proceso)
Ruta = Split(Buffer, Chr$(0))(0)
End Function
lngPid = lProcesses(N)
Muchas gracias por tu ayuda, ya lo adapte y funciona perfectamente ;-)
Saludos! :D