vb.net - 从正在运行的进程中提取文件名和路径

标签 vb.net process path filenames

我正在为客户编写屏幕截图应用程序。捕获部分很好,但他想获取捕获的文件的名称和路径。

使用 system.diagnostics.process 我能够获取捕获的进程,并且可以获取 EXE 的完整路径,但不能获取打开的文件。

IE。记事本以“TextFile1.txt”作为其文档打开。我可以从进程中获得 MainWindowTitle,它是“TextFile1.txt - Notepad”,但我需要的更像是“c:\users....\TextFile1.txt”

有没有办法从流程中获取更多信息?

我确定有办法,但我想不通

非常感谢任何帮助。

最佳答案

您可以使用 ManagementObjectSearcher获取进程的命令行参数,在这个记事本示例中,您可以解析出文件名。这是一个简单的控制台应用程序示例,它在记事本中写出所有打开文件的完整路径和文件名。

Imports System
Imports System.ComponentModel
Imports System.Management
Module Module1
    Sub Main()
        Dim cl() As String
        For Each p As Process In Process.GetProcessesByName("notepad")
            Try
                Using searcher As New ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " & p.Id)
                    For Each mgmtObj As ManagementObject In searcher.Get()
                        cl = mgmtObj.Item("CommandLine").ToString().Split("""")
                        Console.WriteLine(cl(cl.Length - 1))
                    Next
                End Using
            Catch ex As Win32Exception
                'handle error
            End Try
        Next
        System.Threading.Thread.Sleep(1000000)
    End Sub
End Module

我必须添加对这个特定 dll 的引用:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Managment.dll

关于vb.net - 从正在运行的进程中提取文件名和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754241/

相关文章:

regex - 在 VB.net 中将管道分隔文件更改为逗号分隔

linux - 当我们使用 "<"重定向时,shell 做了什么?

process - 工作目录的 System.Diagnostics.Process 问题

python - 在 python (matplotlib) 中优雅地停止(而不是暂停)动画情节

android - 读取存储在内存中的 pdf(文件路径无效)

graph - Floyd Warshall 重建路径

c++ - 如何不丢弃 CDC 路径?

vb.net - Visual Basic .Net 中的属性访问器

c# - 使用另一个字节列表/数组计算字节列表/数组中的出现次数

c# - .NET 如何检查 Windows 进程是否作为 "App"或 "Background application"运行