SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: juravi en Jueves 17 de Febrero de 2005, 22:35

Título: Ejecucion De Un *.exe
Publicado por: juravi en Jueves 17 de Febrero de 2005, 22:35
:devil:
Hola a tod@s.
Alguno sabe o tiene una rutina que detecte si un ejecutable esta en funcionamiento.
 :comp:
Saludos.
Título: Re: Ejecucion De Un *.exe
Publicado por: RadicalEd en Jueves 17 de Febrero de 2005, 22:40
Hola juravi, busca en el foro por lista de procesos, creo que hay unos posts acerca de eso, tengo unas rutinas por ahi, pero las tengo en la casa, dame tiempo y las busco.
Ok Chao.
Título: Re: Ejecucion De Un *.exe
Publicado por: Brroz en Viernes 18 de Febrero de 2005, 10:29
Hola.

Seguramente esto te sirva:
En una dimensión devuelve el pId y en otra el ejecutable.

Código: Text
  1.  
  2. Option Explicit
  3.  
  4. Private Type PROCESSENTRY32
  5.     dwSize As Long
  6.     cntUsage As Long
  7.     th32ProcessID As Long
  8.     th32DefaultHeapID As Long
  9.     th32ModuleID As Long
  10.     cntThreads As Long
  11.     th32ParentProcessID As Long
  12.     pcPriClassBase As Long
  13.     dwFlags As Long
  14.     szExeFile As String * 260
  15. End Type
  16. Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
  17. Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  18. Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  19. Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
  20.  
  21. Public Sub GetProcesos(ByRef Tareas() As String)
  22.  
  23.     Dim lSnapShot As Long
  24.     lSnapShot = CreateToolhelpSnapshot(2&, 0&)
  25.    
  26.     If lSnapShot <> 0 Then
  27.         Dim Proceso As PROCESSENTRY32
  28.         Proceso.dwSize = Len(Proceso)
  29.         Dim lRc As Long, lCta As Long
  30.         lRc = ProcessFirst(lSnapShot, Proceso)
  31.         Do While lRc
  32.             lCta = lCta + 1
  33.             If lCta > 1 Then
  34.                 ReDim Preserve Tareas(2, lCta)
  35.             Else
  36.                 ReDim Tareas(2, 1)
  37.             End If
  38.             Tareas(0, lCta - 1) = Proceso.th32ProcessID
  39.             Tareas(1, lCta - 1) = Left(Proceso.szExeFile, InStr(Proceso.szExeFile, Chr(0)) - 1)
  40.             lRc = ProcessNext(lSnapShot, Proceso)
  41.         Loop
  42.         CloseHandle lSnapShot
  43.     End If
  44.  
  45. End Sub
  46.  
  47.  

Chau.
Título: Re: Ejecucion De Un *.exe
Publicado por: juravi en Viernes 18 de Febrero de 2005, 14:45
:devil:
Hola a todos,
Brroz gracias por la rutina, pero me da pena desirlo.. no se usarla.. me puedes explicar donde usarla.. La puse en un formulario, luego en un modulo y nada.
RadicalEd si me puedes proporsionar tu rutina tambien te lo agradeceria..
Saludos. :hola:
Título: Re: Ejecucion De Un *.exe
Publicado por: RadicalEd en Viernes 18 de Febrero de 2005, 16:27
Mira este Zip, sirve para ver los procesos, es creado por guille.
Ojala te sirva.
Chao
Título: Re: Ejecucion De Un *.exe
Publicado por: Cyclop en Viernes 18 de Febrero de 2005, 17:02
buscalo en www.pscode.com (http://www.pscode.com) ahi hay buenos ejemplos.

Salu2

Cyclopz
Título: Re: Ejecucion De Un *.exe
Publicado por: juravi en Viernes 18 de Febrero de 2005, 17:39
:devil:
Hola  a todos.
 :alien:
 RadicalEd, gracias por el archivo.. esta bn pro. Voy a modificarlo para mi conveniencia.
 :alien:
Cyclop, gracias por la pagina.. manana sabado lo reviso en mi ksa con calma. ya que en la empresa me tienen un poco restringido.
 :alien:
Brroz, si tubieras tiempo y me pudieras explicar tu rutina se te agradeceria.
 :hola:
Saludos.
Título: Re: Ejecucion De Un *.exe
Publicado por: Brroz en Sábado 19 de Febrero de 2005, 08:35
Puedes usar el código en un módulo estándard, módulo de clase o formulario.

Llama al método GetProcesos pasándole como parámetro una matriz de tipo string que habrás declarado previamente. Cuando el método se haya ejecutado, tendrás en la matriz el id de proceso de cada tarea con su correspondiente ejecutable.

Código: Text
  1.  
  2. .
  3. .
  4. .
  5. Dim sProc() As String
  6. GetProcesos sProc
  7. Dim iCta As Integer, iIdx As Integer
  8. iCta = Ubound(sProc)
  9. Form iIdx=0 To iCta - 1
  10.    MsgBox sProc(0, iIdx) & " - " & sProc(1, iIdx)
  11. Next iIdx
  12. .
  13. .
  14. .
  15.  
  16.  

Chao.