copyright 1999 - 2014 by heinz prelle - hannover  - lenbachstraße 42 - www.visual-basic5.de | impressum
Beispiel: VB .Net - WMI - Laufende Prozesse ermitteln und ausgewählten Prozess beenden
'
Option Explicit On
Option Strict On

Imports System.Management

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles Button1.Click
        Me.ListBox1.Items.Clear()
        Try
            If Wmi.CreateProcessList(Me.TextBox1.Text) IsNot Nothing Then
                Me.ListBox1.Items.AddRange(Wmi.CreateProcessList(Me.TextBox1.Text).ToArray())
                Me.Text = "Processes: " & Me.ListBox1.Items.Count.ToString()
            Else
                '
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message(), "Info - Button1_Click")
        End Try
    End Sub

    Public Class Wmi

        Public Shared Function CreateProcessList(ByVal ComputerName As String) As List(Of String)
            Dim List As New List(Of String)
            Try
                Dim ms As ManagementScope = New ManagementScope("\\" & ComputerName & "\root\cimv2")
                ms.Connect()
                Dim query As String = "Select * From Win32_Process"
                Dim oq As ObjectQuery = New ObjectQuery(query)
                Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher(ms, oq)
                Dim moc As ManagementObjectCollection = mos.Get()
                Dim [Tab] As Char = Convert.ToChar(9)

                For Each mo As ManagementObject In moc
                    List.Add(mo("ProcessID").ToString() & [Tab] & mo("Caption").ToString())
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message(), "Info CreateProcessList")
            End Try
            Return List
        End Function

    End Class

    Private Sub TerminateProcessByName(ByVal ComputerName As String, _
                                       ByVal ProcessName As String, _
                                       ByRef List As List(Of String))
        Const methodName As String = "GetOwner"
        Try
            Dim ms As ManagementScope = New ManagementScope("\\" & ComputerName & "\root\cimv2")
            ms.Connect()
            Dim query As String = "Select * From Win32_Process"
            Dim oq As ObjectQuery = New ObjectQuery(query)
            Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher(ms, oq)

            Dim moc As ManagementObjectCollection = mos.Get
            For Each mo As ManagementObject In moc
                Dim args(2) As String
                mo.InvokeMethod(methodName, args)
                If mo("Name").ToString() = ProcessName Then
                    List.Add(mo("ProcessID").ToString() & Convert.ToChar(9) & mo("Name").ToString())
                    Dim hProcess(2) As Object
                    mo.InvokeMethod("Terminate", hProcess)
                End If
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message(), "Info")
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles MyBase.Load
        With Me
            .Text = ""
            .CenterToScreen()
            .Button1.Text = "Get"
            .TextBox1.Text = My.Computer.Name()
            Me.Label1.Text = "Removed process/es"
        End With
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
            Handles ListBox1.SelectedIndexChanged
        Try
            Dim s() As String = Me.ListBox1.SelectedItem.ToString().Split(Convert.ToChar(9))
            Me.Text = s(1) & Me.ListBox1.SelectedIndex.ToString()
            Dim List As New List(Of String)

            TerminateProcessByName(Me.TextBox1.Text, s(1).Trim(), List)
            If List IsNot Nothing Then
                Me.ListBox2.Items.AddRange(List.ToArray())
                Me.Label1.Text = "Removed process/es: " & Me.ListBox2.Items.Count.ToString()
            End If

            Me.Button1.PerformClick()
        Catch ex As Exception
            MessageBox.Show(ex.Message(), "Info")
        End Try
    End Sub

    Private Sub ListBox2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
            Handles ListBox2.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Right Then
            If Me.ListBox2.Items.Count > 0 Then
                Me.ListBox2.Items.Clear()
                Me.Label1.Text = "Removed process/es: " & Me.ListBox2.Items.Count.ToString()
            End If
        End If
    End Sub

End Class
Sourcecode Visual Basic