【VB.NET2010】遍历进程,获取进程映像路径

11 篇文章 1 订阅

在VB.NET中,我们可以轻易的获取系统中正在运行的进程的名字,路径等数据。而不需要像VB6中一样使用一大堆的API函数。

下面是我某个程序中的一段代码,用来将进程名显示在一个列表框中

    Sub UpdateCurrentTask() 'ok at 13-08-12 负责在独立线程实时更新正在运行的线程的变化【完成】
        '负责更新显示的进程
        Dim kProcess() As System.Diagnostics.Process
        Dim kProc As System.Diagnostics.Process
        Dim TaskList As New List(Of String)
        Dim BoxList As New List(Of String)
        While (True)
            kProcess = System.Diagnostics.Process.GetProcesses()
            TaskList.Clear()
            BoxList.Clear()
            For Each kProc In kProcess
                '将进程名保存如列表
                TaskList.Add(kProc.ProcessName)
            Next
            For j As Integer = 0 To Running.Items.Count - 1
                '将列表中的项目保存
                BoxList.Add(Running.Items.Item(j))
            Next
            '开始比对列表中现存的,如果列表中的项不存在于进程中,则会被剔除
            For ji As Integer = BoxList.Count - 1 To 0 Step -1
                Dim i As String = BoxList.Item(ji)
                If TaskList.Contains(i) = True Then
                Else
                    Invoke(New vRemoveRunning(AddressOf RemoveRunning), i)
                    BoxList.Remove(i)
                End If
            Next
            '开始比较进程与列表,列表中不存在的进程中的项,将被加入
            For ji As Integer = TaskList.Count - 1 To 0 Step -1
                Dim i As String = TaskList.Item(ji)
                If BoxList.Contains(i) = True Then
                Else
                    BoxList.Add(i)
                    Invoke(New vAddRunning(AddressOf AddRunning), i)
                End If
            Next
            Threading.Thread.Sleep(500)
        End While
    End Sub

一个简单的例子:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim kProcess() As System.Diagnostics.Process
        Dim kProc As System.Diagnostics.Process
        kProcess = System.Diagnostics.Process.GetProcesses()
        For Each kProc In kProcess
            Try
                Debug.Print("进程名:" & kProc.ProcessName)
                Debug.Print("映像路径:" & kProc.MainModule.FileName)
                For Each pro As Diagnostics.ProcessModule In km
                    Debug.Print("Module Path:" & pro.FileName)
                Next
                Debug.Print("…………………………………………………………")
            Catch ex As Exception

            End Try
        Next
    End Sub


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB.NET中,我们可以使用`FtpFindFirstFile`和`FtpFindNextFile`函数来遍历FTP服务器上的文件。这两个函数是通过P/Invoke调用Windows API实现的。 以下是一个示例代码,演示了如何使用`FtpFindFirstFile`和`FtpFindNextFile`函数来遍历FTP服务器上的文件: ```vb Imports System.Runtime.InteropServices Public Structure WIN32_FIND_DATA Public dwFileAttributes As Integer ' 其他字段... End Structure <DllImport("wininet.dll", CharSet:=CharSet.Auto, SetLastError:=True)> Private Shared Function FtpFindFirstFile(hConnect As IntPtr, lpszSearchFile As String, lpFindFileData As IntPtr, dwFlags As Integer, dwContent As Integer) As IntPtr End Function <DllImport("wininet.dll", CharSet:=CharSet.Auto, SetLastError:=True)> Private Shared Function FtpFindNextFile(hFind As IntPtr, lpFindFileData As IntPtr) As Boolean End Function <DllImport("wininet.dll", CharSet:=CharSet.Auto, SetLastError:=True)> Private Shared Function InternetOpen(lpszAgent As String, dwAccessType As Integer, lpszProxyName As String, lpszProxyBypass As String, dwFlags As Integer) As IntPtr End Function <DllImport("wininet.dll", CharSet:=CharSet.Auto, SetLastError:=True)> Private Shared Function InternetCloseHandle(hInternet As IntPtr) As Boolean End Function Public Sub ListFtpFiles() Dim hInternet As IntPtr = IntPtr.Zero hInternet = InternetOpen("AppName", 0, Nothing, Nothing, 0) If hInternet <> IntPtr.Zero Then Dim hConnect As IntPtr = IntPtr.Zero ' 连接到 FTP 服务器 hConnect = FtpOpenFile(hInternet, "ftp://example.com", "username", "password", 0, 0) If hConnect <> IntPtr.Zero Then Dim lpFindFileData As New IntPtr() ' 查找第一个文件 lpFindFileData = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(WIN32_FIND_DATA))) Dim hFind As IntPtr = FtpFindFirstFile(hConnect, "*", lpFindFileData, 0, 0) If hFind <> IntPtr.Zero Then Do Dim findData As WIN32_FIND_DATA = CType(Marshal.PtrToStructure(lpFindFileData, GetType(WIN32_FIND_DATA)), WIN32_FIND_DATA) ' 处理文件信息... Console.WriteLine(findData.cFileName) Loop While FtpFindNextFile(hFind, lpFindFileData) InternetCloseHandle(hFind) End If ' 关闭 FTP 连接 InternetCloseHandle(hConnect) End If InternetCloseHandle(hInternet) End If End Sub ``` 在上述示例中,我们使用`FtpOpenFile`函数连接到FTP服务器,并使用`FtpFindFirstFile`函数查找第一个文件。然后,我们使用`FtpFindNextFile`函数循环遍历并处理每个文件的信息。 请注意,您需要根据实际情况替换示例代码中的`ftp://example.com`、`username`和`password`。另外,记得在使用完内存后释放它们,以避免内存泄漏。 希望这可以帮助到您!如果您有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值