Título: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: javito14 en 27 Julio 2008, 01:23 am
Pues eso, cómo puedo saber si un programa está ejecutándose. He vista un montón de ejemplos pero ninguno como lo que yo quiero hacer. El único que aparece es leer el nombre de la ventana y cerrar esta, pero el programa que quiero cerrar cambia la ventana, como lo hace el firefox dependiendo en qué página estés, y entonces no se cierra. Cerrar la aplicación es fácil pero lo que quiero es detectar si está en ejecución y si lo está pues la cierro con el shell así private Sub Form_Load() Shell("cmd.exe /c Taskkill nombredelprograma.exe") End Sub
Pues eso, si alguien sabe como detectar si una aplicación está en ejecución por favor que me ayude. Gracias de antemano.
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: seba123neo en 27 Julio 2008, 01:44 am
Hola,podes probar esto,es del api-guide o sea hay que buscar :¬¬... 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() MsgBox EstaCorriendo("calc.exe") End Sub
eso de usar batch para programar en visual basic me tiene harto,no es programar en visual basic usar comandos de batch...hacelo con lo qeu te ofrece visual basic... saludos.
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: krackwar en 27 Julio 2008, 04:49 am
Hola,podes probar esto,es del api-guide o sea hay que buscar :¬¬... 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() MsgBox EstaCorriendo("calc.exe") End Sub
eso de usar batch para programar en visual basic me tiene harto,no es programar en visual basic usar comandos de batch...hacelo con lo qeu te ofrece visual basic... saludos. Me da rabia contigo seba123neo :-\ por que estas fomentando la flojera ya que les das el trabajo hecho y ellos ni siquiera se dan el trabajo de buscar.
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: seba123neo en 27 Julio 2008, 05:04 am
la verdad tenes razon, soy un boludo :xD
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: krackwar en 27 Julio 2008, 06:23 am
soy un boludo :xD
Por fin lo admites :xD :xD :xD :xD :xD
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: cobein en 27 Julio 2008, 07:16 am
Este tipo de preguntas hacen honor al nombre del foro! xD
Título: Re: ¿Cómo detecto si un programa está ejecutándose?
Publicado por: SKL (orignal) en 27 Julio 2008, 11:47 am
Este tipo de preguntas hacen honor al nombre del foro! xD
concuerdo!!! si vos mismo ejecutaste el progrrama, usa el previnstance de cobein!!! sl2
|