我正在为客户编写屏幕截图应用程序。捕获部分很好,但他想获取捕获的文件的名称和路径。
使用 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/