5

クライアント用のスクリーン キャプチャ アプリケーションを作成しています。キャプチャ部分は問題ありませんが、彼はキャプチャの対象となるファイルの名前とパスを取得したいと考えています。

system.diagnostics.process を使用すると、キャプチャしたプロセスを取得でき、EXE のフル パスを取得できますが、開いているファイルは取得できません。

すなわち。メモ帳は「TextFile1.txt」をドキュメントとして開いています。プロセスから「TextFile1.txt - メモ帳」になる MainWindowTitle を取得できますが、必要なのは「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 に答える