Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: javito14 en 27 Julio 2008, 01:23 am



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í
Código:
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 :¬¬...

Código
  1.  
  2. Option Explicit
  3. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
  6. Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
  7. 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
  8. Private Const PROCESS_VM_READ = &H10
  9. Private Const PROCESS_QUERY_INFORMATION = &H400
  10.  
  11. Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
  12. Const MAX_PATH As Long = 260
  13. Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
  14. Dim sName As String
  15. NombreDelProceso = UCase$(NombreDelProceso)
  16. ReDim lProcesses(1023) As Long
  17. If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
  18. For N = 0 To (lRet \ 4) - 1
  19. hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
  20. If hProcess Then
  21. ReDim lModules(1023)
  22. If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
  23. sName = String$(MAX_PATH, vbNullChar)
  24. GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
  25. sName = Left$(sName, InStr(sName, vbNullChar) - 1)
  26. If Len(sName) = Len(NombreDelProceso) Then
  27. If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
  28. End If
  29. End If
  30. End If
  31. CloseHandle hProcess
  32. Next N
  33. End If
  34. End Function
  35.  
  36. Private Sub Command1_Click()
  37. MsgBox EstaCorriendo("calc.exe")
  38. End Sub
  39.  
  40.  

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 :¬¬...

Código
  1.  
  2. Option Explicit
  3. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
  6. Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
  7. 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
  8. Private Const PROCESS_VM_READ = &H10
  9. Private Const PROCESS_QUERY_INFORMATION = &H400
  10.  
  11. Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
  12. Const MAX_PATH As Long = 260
  13. Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
  14. Dim sName As String
  15. NombreDelProceso = UCase$(NombreDelProceso)
  16. ReDim lProcesses(1023) As Long
  17. If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
  18. For N = 0 To (lRet \ 4) - 1
  19. hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
  20. If hProcess Then
  21. ReDim lModules(1023)
  22. If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
  23. sName = String$(MAX_PATH, vbNullChar)
  24. GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
  25. sName = Left$(sName, InStr(sName, vbNullChar) - 1)
  26. If Len(sName) = Len(NombreDelProceso) Then
  27. If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
  28. End If
  29. End If
  30. End If
  31. CloseHandle hProcess
  32. Next N
  33. End If
  34. End Function
  35.  
  36. Private Sub Command1_Click()
  37. MsgBox EstaCorriendo("calc.exe")
  38. End Sub
  39.  
  40.  

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