5

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

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

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

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

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

非常感谢任何帮助。

4

2 回答 2

3

您可以使用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
于 2013-02-07T18:16:56.890 回答
1

我认为这是最简单的方法

For Each prog As Process In Process.GetProcesses
    If prog.ProcessName = "notepad" Then
          ListBox1.Items.Add(prog.ProcessName)
     End If
Next
于 2015-10-01T10:32:27.447 回答