1. 程式人生 > >vb.net 獲取程序列表

vb.net 獲取程序列表

這個方法肯定不是最好的,查到的資料還有使用程序快照的,但是不知道為什麼vs中不能使用程序的結構體PROCESSENTRY32

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 "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long

以下只是實現了方法而已,優化再考慮。

1.必須是用resume next,否則會彈出當前未執行或者拒絕訪問等

 On Error Resume Next

        processes = System.Diagnostics.Process.GetProcesses()'獲取程序列表陣列
        Label1.Text = "程序數量:" + CStr(processes.Length)
        For i = 0 To processes.Length - 1
            childProcess.proces = processes(i)
            childProcess.Name = childProcess.proces.ProcessName'當前程序的名稱
            childProcess.ID = childProcess.proces.Id'當前程序的PID
            childProcess.Path = childProcess.proces.MainModule.FileName.ToString()'當前程序的路徑


            parentProcess.ID = ParentID(childProcess.proces.ProcessName)’獲取父程序PID
            parentProcess.proces = Process.GetProcessById(parentProcess.ID)
            parentProcess.Name = parentProcess.proces.ProcessName'父程序名稱
            parentProcess.Path = parentProcess.proces.MainModule.FileName.ToString()'父程序路徑


            With ListView1'listview顯示所有資訊
                Dim lItem As System.Windows.Forms.ListViewItem = ListView1.Items.Add(childProcess.Name)
                With lItem
                    .SubItems.Add(CStr(childProcess.ID))
                    .SubItems.Add(childProcess.Path)
                    .SubItems.Add(parentProcess.Name)
                    .SubItems.Add(CStr(parentProcess.ID))
                    .SubItems.Add(parentProcess.Path)
                End With
            End With

        Next

‘獲取當前程序的父程序PID

    Private Function ParentID(ByVal pn As String) As Integer
        Dim parentd As New PerformanceCounter("Process", "Creating Process ID", pn)
        Return parentd.NextValue
    End Function