2011-01-27 41 views
11

Giả sử tôi đã có tay cầm vào một cửa sổ, tôi có thể lấy PID với GetWindowThreadProcessId. Có cách nào tôi có thể nhận được tên quá trình mà không cần phải có được tất cả các quy trình và cố gắng để phù hợp với PID của tôi?Lấy tên quy trình từ pid hoặc xử lý

Trả lời

15

Bạn có thể sử dụng Process.GetProcessById để nhận Process. Process có rất nhiều thông tin về chương trình đang chạy. Process.ProcessName cung cấp cho bạn tên, Process.MainModule.FileName cung cấp cho bạn tên của tệp thi hành.

+0

Có bạn đúng. Cảm ơn bạn. Và tôi cũng có thể nhận được thông tin khác về quá trình này. – user579674

+3

Lưu ý rằng Process.MainModule.Filename thất bại khi được gọi trên một mục tiêu 64bit từ một chương trình x86. ProcessName không bị giới hạn đó. – EricLaw

+0

@EricLaw Bạn có biết điều ngược lại có đúng không? Giống như khi sử dụng một chương trình 64bit để gọi Process.MainModule.Filename trên một mục tiêu x86? – FreeSnow

12
Process.GetProcessById(id).ProcessName 
0

// Dưới đây là một phương pháp nhỏ gọn để trả về bộ nhớ trình quản lý tác vụ. Nếu id quá trình không tồn tại, nó sẽ ném một ngoại lệ và trả về 0 cho bộ nhớ

/// <summary> 
    /// Gets the process memory. 
    /// </summary> 
    /// <param name="processId">The process identifier.</param> 
    /// <returns></returns> 
    /// <para> </para> 
    /// <para> </para> 
    /// <exception cref="ArgumentException"> </exception> 
    /// <exception cref="ArgumentNullException"> </exception> 
    /// <exception cref="ComponentModel.Win32Exception"> </exception> 
    /// <exception cref="InvalidOperationException"> </exception> 
    /// <exception cref="PlatformNotSupportedException"> </exception> 
    /// <exception cref="UnauthorizedAccessException"> </exception> 
    public static long GetProcessMemory(int processId) 
    { 
     try 
     { 
      var instanceName = Process.GetProcessById(processId).ProcessName; 

      using (var performanceCounter = new PerformanceCounter("Process", "Working Set - Private", instanceName)) 
      { 
       return performanceCounter.RawValue/Convert.ToInt64(1024); 
      } 
     } 
     catch (Exception) 
     { 
      return 0; 
     } 
    } 
Các vấn đề liên quan