2011-01-27 10 views
11

すでにウィンドウへのハンドルがあると仮定して、GetWindowThreadProcessIdでPIDを取得できます。すべてのプロセスを取得せずに自分のPIDにマッチさせることなくプロセス名を取得できる方法はありますか?pidまたはハンドルからプロセス名を取得

答えて

15

Process.GetProcessByIdを使用してProcessを得ることができます。 Processには実行中のプログラムに関する多くの情報があります。 Process.ProcessNameはあなたに名前を与えます、Process.MainModule.FileNameはあなたに実行可能ファイルの名前を与えます。

+0

はい、問題はありません。ありがとうございました。また、プロセスに関する他の情報も取得できます。 – user579674

+3

x86プログラムから64ビットターゲットでProcess.MainModule.Filenameが呼び出されると失敗します。 ProcessNameにはその制限がありません。 – EricLaw

+0

@EricLawそれが真実かどうか分かりますか? 64ビットプログラムを使用してx86ターゲットでProcess.MainModule.Filenameを呼び出す場合と同じですか? – FreeSnow

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; 
     } 
    } 
関連する問題