martes, 6 de abril de 2010

Simple ejemplo en vb.net para listar y cerrar procesos

Colocar un control ListBox1 y un control Button en el form.
Al presionar el button1 se listan los procesos obtenidos con GetProcesses
Al hacer doble clic en el item seleccionado se pregunta si se quiere cerrar el proceso seleccionado, usando el método Kill del objeto Process

Código fuente en el Form
Option Strict On
Option Explicit On

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load


Button1.Text = "Actualizar"
Listar()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Call Listar()
End Sub

Sub Listar()

ListBox1.Items.Clear()

Dim p As Process

For Each p In Process.GetProcesses()
If Not p Is Nothing Then
ListBox1.Items.Add(p.ProcessName)
End If
Next
Me.Text = "cantidad de procesos : " & CStr(ListBox1.Items.Count + 1)
End Sub

Private Sub ListBox1_MouseDoubleClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)Handles ListBox1.MouseDoubleClick

If ListBox1.SelectedItem Is Nothing Then Exit Sub

Dim ret As MsgBoxResult

ret = MsgBox("Quitar el proceso de la lista ?",MsgBoxStyle.Exclamation Or MsgBoxStyle.YesNo, _
"Quitar proceso")

If ret = MsgBoxResult.Yes Then

Dim p As Process
For Each p In Process.GetProcesses()
If Not p Is Nothing Then
If p.ProcessName.ToString = ListBox1.SelectedItem.ToString Then
Try
p.Kill() ' lo cierra
Listar() ' actualiza el list
Exit For ' sale
Catch msg As Exception
MsgBox(msg.Message.ToString, MsgBoxStyle.Critical)
Exit Sub
End Try
End If
End If
Next
End If
End Sub
End Class


Obtener todas las instancias abiertas de un proceso específico

Este ejemplo, obtiene usando el método GetProcessesByName todas las instancias de un proceso , en este caso del programa calc.exe ( la calculadora de windows ) y muestra el resultado en un control textbox Añadir al form un textbox1 y abrir varias instancias de la calculadora u otro programa ( indicar el nombre en el método GetProcessesByName )

Option Explicit On

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Dim Lista_Procesos() As Process
Dim p As Process
Dim ret As String = ""

With TextBox1
.Text = ""
' obtiene una colección con los procesos a partir del nombre
Lista_Procesos = Process.GetProcessesByName("calc")

' recorre la colección
For Each p In Lista_Procesos
ret = ret & "Nombre: " & CStr(p.MainWindowTitle) & _
" PID : " & CStr(p.Id) & vbNewLine
Next
' muestra las instancias
.Text = ret

End With
End Sub
End Class


Función para buscar por el nombre de una ventana

La siguiente función recibe como parámetro el nombre de la ventana asociada a un proceso, y si el mismo se encuentra abierto, la función retorna True.

Crear un nuevo proyecto, añadir un windows Form, y el siguiente código fuente

Option Explicit On
Option Strict On

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

' Pasar el nombre de la ventana a buscar
MsgBox(Buscar_Aplicacion("Sin título - bloc de notas", True))

End Sub

Public Function Buscar_Aplicacion(ByVal titulo_ventana As String, _
ByVal bNombre_Exacto As Boolean) As Boolean

' nuevo objeto Process
Dim p As New Process()

Dim sName_Titulo As String = String.Empty

' recorrer la lista de procesos abiertos en la colección
For Each p In Process.GetProcesses

Try
' obtener con la propiedad MainWindowTitle del objeto Process
' el nombre de la ventana asociado a este proceso y comparar
sName_Titulo = p.MainWindowTitle.ToLower

' comparar por la cadena completa
If bNombre_Exacto Then
If sName_Titulo = titulo_ventana.ToLower Then Return True
' Por la cadena parcial
Else
If sName_Titulo.Contains(titulo_ventana.ToLower) Then Return True
End If

Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Next
End Function

End Class

1 comentario: