假设我已经有一个窗口的句柄,我可以使用
GetWindowThreadProcessId
获取该进程的PID。有没有一种方法可以在不获取所有进程并尝试匹配我的PID的情况下获取进程名称?Process.GetProcessById
方法获取 Process
进程对象。这个对象包含了关于正在运行的程序的大量信息。通过 Process.ProcessName
可以得到进程名称,通过 Process.MainModule.FileName
可以得到可执行文件的名称。string name;
using (var p = Process.GetProcessById(id)) { name = p.ProcessName; }
// 这是一个很棒的小方法来返回任务管理器内存。如果进程 ID 不存在,它将会抛出异常并返回内存为 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;
}
}