Предполагая, что у меня уже есть дескриптор окна, я могу получить pid с GetWindowThreadProcessId. Есть ли способ получить имя процесса без необходимости получать все процессы и пытаться сопоставить мой pid?
Получить имя процесса из pid или handle
Ответ 1
Вы можете использовать Process.GetProcessById
для получения Process
. Process
содержит много информации о текущей программе. Process.ProcessName
дает имя, Process.MainModule.FileName
дает имя исполняемого файла.
Ответ 2
Process.GetProcessById(id).ProcessName
Ответ 3
//Вот аккуратный метод возврата памяти диспетчера задач. Если идентификатор процесса не существует, он генерирует исключение и возвращает 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;
}
}