Obtención de Procesos en Ejecución
Como obtener los procesos que se están ejecutando en un ordenador

Fecha: 30/Oct/2004 (29 octubre 2004)
Autor: Xavier O'Callaghan R. ([email protected]

 



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'C

A 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 Type

Ahora, 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.

 


ir al índice