2011-01-27 12 views
11

Suponiendo que ya tengo el control de una ventana, puedo obtener el PID con GetWindowThreadProcessId. ¿Hay alguna forma de obtener el nombre del proceso sin tener que obtener todos los procesos y tratar de hacer coincidir mi PID?Obtener el nombre del proceso de pid o manejar

Respuesta

15

Puede usar Process.GetProcessById para obtener Process. Process tiene mucha información sobre el programa en ejecución. Process.ProcessName le da el nombre, Process.MainModule.FileName le da el nombre del archivo ejecutable.

+0

Sí, tiene razón. Gracias. Y también puedo obtener más información sobre el proceso. – user579674

+3

Tenga en cuenta que Process.MainModule.Filename falla al invocar un destino de 64 bits desde un programa x86. ProcessName no sufre de esa limitación. – EricLaw

+0

@EricLaw ¿Sabes si sucede lo contrario? ¿Como cuando se usa un programa de 64 bits para llamar a Process.MainModule.Filename en un objetivo x86? – FreeSnow

12
Process.GetProcessById(id).ProcessName 
0

// Aquí hay un pequeño y ordenado método para devolver la memoria del administrador de tareas. Si la identificación del proceso no existe, lanzará una excepción y devolverá 0 para la memoria

/// <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; 
     } 
    } 
Cuestiones relacionadas