【C#】プロセスの一覧を取得する


この記事はプロモーションを含みます。

C#

C#で、Windowsの実行中のプロセス一覧を取得する方法を解説します。

はじめに

本記事では、実行中のプロセス名とプロセスIDの一覧を取得する方法を説明します。
取得したプロセスの情報は、リッチテキストボックスに出力します。
以下は、フォームデザインのソースコードです。

namespace WinFormsApp2
{
    partial class Form1
    {
        /// <summary>
        /// 必要なデザイナー変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージド リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows フォーム デザイナーで生成されたコード

        /// <summary>
        /// デザイナー サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディターで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            richTextBox1 = new RichTextBox();
            button1 = new Button();
            SuspendLayout();
            // 
            // richTextBox1
            // 
            richTextBox1.Location = new Point(14, 69);
            richTextBox1.Margin = new Padding(4);
            richTextBox1.Name = "richTextBox1";
            richTextBox1.Size = new Size(597, 239);
            richTextBox1.TabIndex = 0;
            richTextBox1.Text = "";
            // 
            // button1
            // 
            button1.Location = new Point(14, 13);
            button1.Margin = new Padding(4);
            button1.Name = "button1";
            button1.Size = new Size(138, 48);
            button1.TabIndex = 1;
            button1.Text = "button1";
            button1.UseVisualStyleBackColor = true;
            button1.Click += button1_Click;
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 15F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(624, 321);
            Controls.Add(button1);
            Controls.Add(richTextBox1);
            FormBorderStyle = FormBorderStyle.FixedDialog;
            Margin = new Padding(4);
            MaximizeBox = false;
            Name = "Form1";
            Text = "Form1";
            ResumeLayout(false);
        }

        #endregion

        private System.Windows.Forms.RichTextBox richTextBox1;
        private System.Windows.Forms.Button button1;
    }
}

プロセスの一覧を取得する

ここでは、シンプルにプロセス名とプロセスIDの一覧を取得する方法を説明します。

ソースコード

using System.Diagnostics;

namespace WinFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 実行中のプロセスを取得
            Process[] processes = Process.GetProcesses();

            // 各プロセスの情報を表示
            foreach (Process process in processes)
            {
                // プロセス情報をリッチテキストボックスに出力
                richTextBox1.AppendText($"プロセス名:{process.ProcessName}, プロセスID:{process.Id}\n");
            }
        }
    }
}

ボタンをクリックすることで、リッチテキストボックスにプロセス情報が出力されます.

15行目で、実行中のプロセス情報の取得、
21行目で、取得したプロセス情報からプロセス名とプロセスIDの抽出、リッチテキストボックスへの出力を行っています。

実行イメージ

ソートしつつ一覧を取得する

ここでは、プロセス名の昇順でプロセス名とプロセスIDの一覧を取得する方法を説明します。

ソースコード

using System.Diagnostics;

namespace WinFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 実行中のプロセスを取得
            List<Process> processes = Process.GetProcesses()
                    .OrderBy(p => p.ProcessName)
                    .ToList();

            // 各プロセスの情報を表示
            foreach (Process process in processes)
            {
                // プロセス情報をリッチテキストボックスに出力
                richTextBox1.AppendText($"プロセス名:{process.ProcessName}, プロセスID:{process.Id}\n");
            }
        }
    }
}

15行目で、実行中のプロセス情報の取得し、
16行目で、プロセス名をキーにして昇順に並べ替えています。

ソースコードの16行目を修正することで、降順にすることも可能です。
・昇順:.OrderBy(p => p.ProcessName)
・降順:.OrderByDescending(p => p.ProcessName)

実行イメージ

コメント

タイトルとURLをコピーしました