Cómo listar y detener procesos con Visual Basic 2008

10-abr-2010 Juan Arturo Olmedo Ramírez

Listar_Procesos - jaor
Listar_Procesos - jaor
Este artículo muestra como listar los procesos que se estén ejecutando en la PC, y cómo detenerlos; como lo hace el Administrador de Tareas de Windows.

El tener acceso a las aplicaciones que se encuentren ejecutándose en una PC, es un recurso que tarde o temprano es necesario en la tarea de programación. Tanto lo es que Windows proporciona una utilería dentro de su paquete llamada Administrador de Tareas. Obviamente esta utilería no puede ser modificada y es cuando se presenta la necesidad de realizar la programación de esta funcionalidad.

Creando el proyecto

Se ejecuta Visual Basic 2008 y creamos un proyecto nuevo con las opciones >Archivo >Proyecto >Aplicación de Windows Form. Se escribe el nombre "ListaProcesos" o el que desee y se presiona "Aceptar". Visual Basic construye la estructura base de la aplicación y muestra una forma inicial vacía.

El objetivo de la aplicación es listar los procesos que estén ejecutándose y cada 10 segundos actualizar esta lista; además de contar con un botón para poder detener cualquiera de ellos.

Diseñando la interfaz

Para diseñar la interfaz se agregan a la forma, los siguientes objetos.

Un ListView con los siguientes atributos:

Name = lvProcesos 'Nombre del ListView

View = Details 'Para que muestren los datos

Sorting = Ascending 'Para que los datos estén ordenados

Gride Lines = True 'Para que aparezcan las líneas divisorias

Columns = Proceso, Titulo de la Ventana, Hora Inicio, Prioridad

Un Label con lo siguientes atributos:

Name = lblActualizar 'Nombre del Label

Text = "Actualizar en:" 'Mensaje de actualización

Un TextBox con los siguientes atributos:

Name = txtSegundos ' Nombre del Textbox

Text = 10 'Segundos que se utilizarán para actualizar la lista

Un Button con los siguientes atributos:

Name = btnDetener ' El nombre del Button

Text = Detener ' El texto indicando la acción del botón

Un Timer con los siguientes atributos

Name = timeActualizar 'Nombre del Timer

Enabled = True 'Activa el Timer

Interval = 1000 ' Cada 1 segundo trabajará el Timer

La función para listar los procesos

Se entra a la "vista de código" y se crea una función llamada SubActualizaProcesos. Una vez creada se definen las variables que se utilizarán

'Vector para lista de Procesos

Dim procesos() As Process = Process.GetProcesses

'Cadena para el nombre del proceso

Dim proceso As Process

El siguiente código inicialmente quita los items que tiene el ListView y ejecuta un ciclo para cada uno de los procesos obtenidos en el Vector; en el cual se depositan los datos en el ListView.

'Limpio Items Control ListView

lvProcesos.Items.Clear()

'Ciclo para cada uno de los procesos

For Each proceso In procesos

'Capturo error de Exception

Try

'Coloco los datos del Proceso en el ListView

With lvProcesos.Items.Add(proceso.ProcessName)

'Capturo Error al Acceder datos del proceso

Try

'Coloco los datos del proceso en el ListView

.SubItems.Add(proceso.MainWindowTitle)

.SubItems.Add(proceso.StartTime.ToString("dd/MM HH:mm:ss"))

.SubItems.Add(proceso.PriorityClass.ToString)

Catch

'Por si hubo error

.SubItems.Add(" ")

End Try

End With

Catch ex As Exception

'Error de Exception

MsgBox(ex.Message + "Error al actualizar los procesos")

Exit Sub

End Try

Next

La actualización cada 10 segundos

Ahora se escribe el código dentro de la función del Timer, la cual se activa cada segundo. Cada vez que se ejecute, se reduce en "1" el TextBox txtSegundos, y cuando se verifique que llegue a "0"; se mandará ejecutar de nueva cuenta la función SubActualizaProcesos y se inicializará el contador de segundos a "0".

Deteniendo los procesos

Ahora se debe escribir el código dentro de la función click del botón btnDetener, para que cuando se presione, detenga el proceso que se haya seleccionado en el ListView. El código primeramente obtiene todos los recursos correspondientes al nombre del proceso a detener, y posteriormente lo cierra con la función CloseMainWindow. En caso de que no se haya logrado la salida con éxito; entonces elimina el proceso con la función Kill y libera los recursos del proceso con la función Close.

'Variable con el nombre del programa

Dim prog As String

'Captura el Error al Seleccionar del ListView

Try

'Obtiene el Nombre del Programa Seleccionado

prog = lvProcesos.SelectedItems(0).Text

Catch

'Sale en caso de Error

Exit Sub

End Try

'Captura el Error al Detener proceso

Try

'Obtiene Recursos del Proceso de acuerdo al nombre del programa

Dim procesos() As Process = Process.GetProcessesByName(prog)

'Cierra la ventana

procesos(0).CloseMainWindow()

'Verifica si no la pudo cerrar

If procesos(0).HasExited = False Then

'Elimina el Proceso

procesos(0).Kill()

'Libera recursos

procesos(0).Close()

End If

'Actualizamos Procesos

Call SubActualizaProcesos()

'Inicializamos Segundos

txtSegundos.Text = "10"

Catch ex As Exception

'El Mensaje de Error de la Exception

MsgBox(" Error al detener el proceso: " & ex.Message)

End Try

Ejecutando el programa

Finalmente lo que resta es indicar que la actualización de los procesos se ejecute al cargarse la forma inicialmente, en el evento Load. En caso de no hacerlo, se tendría que esperar 10 segundos para que lo realizara el Timer.

'Llamada a Función Actualizar dentro de la carga de la forma

Call SubActualizaProcesos

<Pulse aquí para ver video>

<Pulse aquí para descargar el código>

Copyright del artículo: Juan Arturo Olmedo Ramírez. Contacta con el autor de este artículo para obtener su permiso y autorización expresa para poder usar o publicar su contenido de forma total o parcial.

  • Listar_Procesos - jaor

    Listar_Procesos - jaor

Deja tu opinión

NOTA: Al no ser miembro de Suite101.net, tu comentario pasará un filtro de supervisión antes de que aparezca publicado.
Enviar comentario
Cuánto es 3+0?