이미 창 핸들을 가지고 있다고 가정하고 GetWindowThreadProcessId
을 사용하여 PID를 얻을 수 있습니다. 모든 프로세스를 가져와 내 PID와 일치시키지 않고 프로세스 이름을 얻을 수있는 방법이 있습니까?pid 또는 핸들에서 프로세스 이름 가져 오기
11
A
답변
15
Process.GetProcessById
을 사용하면 Process
을 얻을 수 있습니다. Process
에는 실행중인 프로그램에 대한 많은 정보가 있습니다. Process.ProcessName
에 이름이 주어지면 Process.MainModule.FileName
은 실행 파일의 이름을 제공합니다.
12
Process.GetProcessById(id).ProcessName
0
// 여기 작업 관리자 메모리를 반환하는 간단한 방법이 있습니다. 프로세스 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;
}
}
네가 맞습니다. 고맙습니다. 그리고 그 과정에 관한 다른 정보도 얻을 수 있습니다. – user579674
x86 프로그램에서 64 비트 대상에서 Process.MainModule.Filename을 호출하면 오류가 발생합니다. ProcessName은 그 제한을 겪지 않습니다. – EricLaw
@EricLaw 그 반대라면 사실입니까? 64 비트 프로그램을 사용하여 x86 타겟에서 Process.MainModule.Filename을 호출 할 때처럼? – FreeSnow