2013-02-07 14 views
5

Sto scrivendo un'applicazione di cattura schermo per un client. La parte di acquisizione va bene, ma vuole ottenere il nome e il percorso del file di cui è composta l'acquisizione.Estrazione di nome file e percorso da un processo in esecuzione

Utilizzo di system.diagnostics.process Sono in grado di ottenere il processo di cui è in possesso l'acquisizione e di ottenere il percorso completo dell'EXE, ma non il file aperto.

ie. Il blocco note è aperto con "TextFile1.txt" come documento. Posso ottenere dal MainWindowTitle il processo che sarebbe 'TextFile1.txt - Blocco note', ma quello che mi serve è più come 'c: \ users .... \ TextFile1.txt'

C'è un modo per ottenere di più informazioni dal processo?

Sono sicuro che ci sia un modo, ma non riesco a capirlo

Qualsiasi aiuto molto apprezzato.

risposta

3

È possibile utilizzare ManagementObjectSearcher per ottenere gli argomenti della riga di comando per un processo e in questo esempio di blocco note è possibile analizzare il nome del file. Ecco una semplice applicazione esempio console che scrive il percorso completo e il nome del file di tutti i file aperti in blocchetto per appunti ..

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 

ho dovuto aggiungere un riferimento a questo specifico dll:

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

Grazie per la risposta, lo testerò a breve e riferirò. –

+0

È eccellente, esattamente quello che stavo cercando. Grazie mille. –

1

penso è il modo più semplice

For Each prog As Process In Process.GetProcesses 
    If prog.ProcessName = "notepad" Then 
      ListBox1.Items.Add(prog.ProcessName) 
    End If 
Next 
Problemi correlati