Obtención de Procesos en Ejecución Fecha: 30/Oct/2004 (29 octubre 2004) |
Con este pequeño código conseguís almacenar en una variable (String) el nombre de los procesos en ejecución -los que podéis ver en la pestaña "Procesos" del administrador de tareas-. Recorre todos lo que se encuentran ejecutándose.
Algunas partes están comentadas pero las he dejado porque si queréis podéis jugar a decomentarlas y descubrir para qué sirven (para matar un proceso).
Seguid estas instrucciones y luego, jugad con ello a vuestro libre albedrío: Ponedlo en vuestro programa, iniciad el word (en el administrador de tareas aparecerá como WINWORD.EXE). Si lo ponéis tal como lo tengo aquí os mostrará una MsgBox diciendo "ejecutado word" cuando éste esté en ejecución.
Una vez que ya lo habéis entendido, aplicadlo al proceso que os interese.
Espero que os sea de provecho.
Saludos
XO'CA continuación sigue código en Visual Basic:
A poner en un Modulo:
Public Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Public Declare Function ProcessFirst Lib "kernel32" Alias "ProcessFirst" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Public Declare Function ProcessNext Lib "kernel32" Alias "ProcessNext" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long ' Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long ' Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long ' Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Public Const TH32CS_SNAPPROCESS = &H2 Public Const TH32CS_SNAPheaplist = &H1 Public Const TH32CS_SNAPthread = &H4 Public Const TH32CS_SNAPmodule = &H8 Public Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule Public Const MAX_PATH As Integer = 260 ' estructura del PROCESSENTRY32 Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * MAX_PATH End TypeAhora, el código que sigue, va en un form.
Private Sub MI_Formulario_Click() '********* Por ejemplo, cuando se haga click en el form ********* Dim l_b_WordYaAbierto As Boolean Dim NOMBRE_PRUEBA_DOC As Long Dim proc As PROCESSENTRY32 Dim snap As Long Dim exename As Long Dim theloop As Long Dim val1 As Long snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) proc.dwSize = Len(proc) theloop = ProcessFirst(snap, proc) 'primer proceso que devuelve valor If exename = "WINWORD.EXE" Then MsgBox "ejecutado word" i = 0 While theloop <> 0 'siguiente proceso exename = proc.szExeFile val1 = 0 val1 = InStr(UCase(exename), ".EXE") If val1 > 0 Then exename = UCase(Left(exename, val1 + 3)) If exename = "WINWORD.EXE" Then MsgBox "ejecutado word" i = i + 1 theloop = ProcessNext(snap, proc) Wend 'CloseHandle snap 'close snapshot handle End Sub
_______Ya está. Esto es todo. FIN_______
NOTA: MIL DISCULPAS PERO EL FICHERO COMO TAL NO LO TENGO PARA QUE OS LO PODÁIS BAJAR SALUDOS. XAVIER. O'C.