Muy buenas tardes,
pues estuve buscando algún código por GooGle que cumpliese con esa función, encontré muchos codes, pero ninguno me funcionó :S.
Mi pregunta es:
¿Qué código debo poner para que me diga si una aplicación está ejecutándose o no?
Más o menos esto es lo que querría :P:
If AKILAAPLICACION.EXE está ejecutándose then
msgbox "Está ejecutándose"
else
msgbox "No se está ejecutando"
End If
Un saludo a tod@s.
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") Then
MsgBox "El programa está en ejecución"
Else
MsgBox "El programa NO está en ejecución"
End If
End Sub
Además de buscar en google deberías usar el buscador del foro un poco (http://foro.elhacker.net/Themes/converted/images/spanish/search.gif), lo he encontrado a la primera...
Saludos!
Cita de: Spider-Net en 6 Junio 2009, 18:16 PM
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") Then
MsgBox "El programa está en ejecución"
Else
MsgBox "El programa NO está en ejecución"
End If
End Sub
Además de buscar en google deberías usar el buscador del foro un poco (http://foro.elhacker.net/Themes/converted/images/spanish/search.gif), lo he encontrado a la primera...
Saludos!
:S, es verdad, gracias por recordarmelo men.
Muchas gracias!
Codigo mas estilisado....
' si hay una instancia del programa ejecutandose
If App.PrevInstance = True Then
Unload Me 'cierro la actual por que ya esta abierta la app
Else
'Aqui lo que quieres que haga tu app, si no se estaba ya ejecutando.
End If
PD: esto solo aplica si quieres saber "si tu aplicacion ya se esta ejecutando", para saber si cualquier ejecutable esta iniciado, toca el code de arriba.
gracias a ambos por su tiempo, andaba buscando algo asi
y como aun estamos en enero de 2010 les deseo un feliz 2010 a todos.
Cita de: Graphixx en 28 Junio 2009, 01:56 AM
Codigo mas estilisado....
' si hay una instancia del programa ejecutandose
If App.PrevInstance = True Then
Unload Me 'cierro la actual por que ya esta abierta la app
Else
'Aqui lo que quieres que haga tu app, si no se estaba ya ejecutando.
End If
PD: esto solo aplica si quieres saber "si tu aplicacion ya se esta ejecutando", para saber si cualquier ejecutable esta iniciado, toca el code de arriba.
http://foro.elhacker.net/programacion_vb/solucionado_como_hacer_para_llamar_a_un_form_desde_otra_instancia_del_programa-t281315.0.html