Cómo listar y detener procesos con Visual Basic 200810-abr-2010 Juan Arturo Olmedo Ramírez
Listar_Procesos - jaor
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 proyectoSe 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 interfazPara 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 procesosAhora 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 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.
|