2013-02-07 31 views
5

Tôi đang viết ứng dụng chụp ảnh màn hình cho khách hàng. Phần chụp là tốt, nhưng anh ta muốn lấy tên và đường dẫn của tập tin.Trích xuất tên tệp và đường dẫn từ quy trình đang chạy

Sử dụng system.diagnostics.process Tôi có thể nhận được quá trình chụp, và có thể nhận được đường dẫn đầy đủ của EXE, nhưng không phải là tệp đang mở.

tức là. Notepad mở bằng 'TextFile1.txt' làm tài liệu của nó. Tôi có thể nhận được từ quá trình MainWindowTitle mà sẽ là 'TextFile1.txt - Notepad' nhưng những gì tôi cần là giống như 'c: \ users .... \ TextFile1.txt'

Có cách nào để nhận được nhiều hơn thông tin từ quá trình này?

tôi chắc chắn rằng có một cách, nhưng tôi không thể hình dung nó ra

Bất kỳ trợ giúp đánh giá rất cao.

Trả lời

3

Bạn có thể sử dụng ManagementObjectSearcher để nhận các đối số dòng lệnh cho một quy trình và trong ví dụ notepad này, bạn có thể phân tích cú pháp tên tệp. Dưới đây là một giao diện điều khiển đơn giản ứng dụng ví dụ mà viết ra đường dẫn đầy đủ và tên tệp của tất cả các file mở bằng notepad ..

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 

tôi phải thêm một tham chiếu đến dll cụ thể này:

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

Cảm ơn bạn đã trả lời, tôi sẽ kiểm tra nó ngay và báo cáo lại. –

+0

Đó là tuyệt vời, Chính xác những gì tôi đang tìm kiếm. Cảm ơn nhiều. –

1

tôi nghĩ rằng đó là cách đơn giản nhất

For Each prog As Process In Process.GetProcesses 
    If prog.ProcessName = "notepad" Then 
      ListBox1.Items.Add(prog.ProcessName) 
    End If 
Next 
Các vấn đề liên quan