2013-02-07 11 views
5

Piszę aplikację do przechwytywania ekranu dla klienta. Część przechwytywania jest w porządku, ale chce uzyskać nazwę i ścieżkę pliku, z którego pochodzi przechwytywanie.Wyodrębnianie nazwy pliku i ścieżki z uruchomionego procesu

Za pomocą system.diagnostics.process Jestem w stanie uzyskać proces przechwytywania i można uzyskać pełną ścieżkę pliku EXE, ale nie otwarty plik.

tj. Notatnik jest otwarty z dokumentem "TextFile1.txt". Mogę uzyskać z procesu MainWindowTitle, który byłby "TextFile1.txt - Notepad", ale potrzebuję bardziej "c: \ users .... \ TextFile1.txt"

Czy istnieje sposób na uzyskanie więcej informacje z procesu?

Jestem pewien, że istnieje sposób, ale nie mogę zrozumieć to

Każda pomoc mile widziana.

Odpowiedz

3

Możesz użyć ManagementObjectSearcher, aby uzyskać argumenty wiersza poleceń dla procesu, a w tym przykładzie notatnika możesz zanalizować nazwę pliku. Oto prosty konsola app przykład, że pisze się pełną ścieżkę i nazwę pliku wszystkich otwartych plików w notatniku ..

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 

musiałem dodać odniesienie do tej konkretnej dll:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Managment.dll 
+0

Dzięki za odpowiedzi, będę go przetestować na krótko i zgłoś się. –

+0

To jest doskonałe, Dokładnie to, czego szukałem. Dziękuję Ci bardzo. –

1

myślę jest to najprostszy sposób

For Each prog As Process In Process.GetProcesses 
    If prog.ProcessName = "notepad" Then 
      ListBox1.Items.Add(prog.ProcessName) 
    End If 
Next 
Powiązane problemy