Получить имя процесса из pid или дескриптора - PullRequest
14 голосов
/ 27 января 2011

Если у меня уже есть дескриптор окна, я могу получить PID с GetWindowThreadProcessId. Есть ли способ, которым я могу получить имя процесса без необходимости получать все процессы и пытаться сопоставить мой PID?

Ответы [ 3 ]

17 голосов
/ 27 января 2011

Вы можете использовать Process.GetProcessById, чтобы получить Process. Process имеет много информации о работающей программе. Process.ProcessName дает вам имя, Process.MainModule.FileName дает вам имя исполняемого файла.

13 голосов
/ 27 января 2011
Process.GetProcessById(id).ProcessName
0 голосов
/ 13 мая 2016

// Вот небольшой метод для возврата памяти диспетчера задач.Если идентификатор процесса не существует, он выдаст исключение и вернет 0 для памяти

    /// <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;
        }
    }
...