2012年4月22日日曜日

C# : 動作中のプロセスのコマンドライン引数を一覧表示

VBでコレをやる方法は検索で見つかりました。

C#でのやり方が書いてなかったので書き換えてみました。 System.Managementの参照を追加して、

// Program.cs
using System;
using System.Collections.Generic;
using System.Management;

namespace ShowAllCommandLines
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] lines = GetCommandLines();
            foreach (string line in lines)
                Console.WriteLine(line);

            //Console.ReadKey();
        }

        public static string[] GetCommandLines()
        {
            List<string> lines = new List<string>();

            ManagementPath p = new ManagementPath("Win32_Process");
            ManagementClass mc = new ManagementClass(p);

            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject obj in moc)
            {
                object commandLineObj = obj["CommandLine"];
                if(commandLineObj != null)
                {
                    string caption = obj["Caption"].ToString();
                    string commandLine = commandLineObj.ToString();
                    lines.Add(caption + " : " + commandLine);
                }
            }

            return lines.ToArray();
        }
    }
}

Management系クラスのリファレンスは読んでないし、パーミッションとかに関しても全く調べてません。 というわけで詳細不明。 とりあえずタスクマネージャーで自分のプロセスとして表示されるものについてはリストアップできるようです。