.NET TIPS

プロセス情報を名前を基に取得するには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2008/03/27

 現在実行中のアプリケーションのプロセスに関する情報(例えば、「ファイル・パス名」や、Windowsタスク・バーなどに表示される「ウィンドウ・タイトル名」などの情報)を取得したい場合、「TIPS:デスクトップ上のすべてのメイン・ウィンドウを列挙するには?」で紹介した方法によってすべてのプロセスを列挙して取得することができるが、そのほかに、プロセスの表示名(以降、プロセス名)をキーに取得することもできる。

 なお、ここでいうプロセス名とは、ファイル・パス名のうち、「パス部分」(例:C:\WINDOWS\system32\)や「拡張子“.exe”」を含まないファイル名のことで、例えばメモ帳(ファイル・パス名は「C:\WINDOWS\system32\notepad.exe」)であれば「notepad」がプロセス名である。

 プロセス名を基にプロセス情報を取得するには、Processクラス(System.Diagnostics名前空間)の静的メソッドGetProcessesByNameを呼び出せばよい。Process.GetProcessesByNameメソッドは、パラメータにプロセス名を文字列で受け取り、戻り値でProcessオブジェクトの配列を返す。配列なのは、そのプロセス名のプロセスが1つとは限らないからだ。

 次のコンソール・アプリケーションのサンプル・コードは、Process.GetProcessesByNameメソッドを使ってProcessオブジェクトの配列を取得し、それぞれのProcessオブジェクトのファイル・パス名をコンソール出力している。

using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      string ProcessName = "notepad";
      Process[] allProcesses =
        Process.GetProcessesByName(ProcessName);

      foreach (Process oneProcess in allProcesses)
      {

        Console.WriteLine("ファイル・パス名:"
          + oneProcess.MainModule.FileName);

        // 出力例:
        // ファイル・パス名:C:\WINDOWS\system32\notepad.exe
      }
    }
  }
}
Imports System.Diagnostics

Module Module1

  Sub Main()
    Dim ProcessName As String = "notepad"
    Dim allProcesses() As Process = _
      Process.GetProcessesByName(ProcessName)

    For Each oneProcess As Process In allProcesses

      Console.WriteLine("ファイル・パス名:" _
                & oneProcess.MainModule.FileName)

      ' 出力例:
      ' ファイル・パス名:C:\WINDOWS\system32\notepad.exe
    Next
  End Sub

End Module
プロセス名をキーにプロセス情報を取得するサンプル・コード(上:C#、下:VB)

 プロセスのファイル・パス名は、ProcessオブジェクトのMainModuleプロパティから取得したProcessModuleクラス(System.Diagnostics名前空間)のオブジェクトのFileNameプロパティから取得できる。

 またWindowsアプリケーションのプロセスに対しては、MainWindowHandleプロパティからメイン・ウィンドウのウィンドウ・ハンドルを取得できる。End of Article

カテゴリ:Windowsフォーム 処理対象:スレッド
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:ProcessModuleクラス(System.Diagnostics名前空間)
関連TIPS:デスクトップ上のすべてのメイン・ウィンドウを列挙するには?

この記事と関連性の高い別の.NET TIPS
デスクトップ上のすべてのメイン・ウィンドウを列挙するには?
多重起動禁止時に実行中のWindowsアプリケーションを最前面に表示するには?
外部プログラム実行時に処理が固まる場合には?
コンソール・アプリケーションの出力を取り込むには?
ほかのアプリケーションを実行してその終了を待つには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間