Посмотреть как диспетчер задач с фильтром - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь создать приложение, в котором я мог бы видеть процесс, путь, пользователя и описание, например подробности диспетчера задач, которые я сделал, но я хочу, чтобы фильтр выполнял поиск по исходному коду, в котором содержится путь к изображению 'Chrome », например, или Если вы могли бы помочь мне получить описание, как изображение диспетчера задач и фильтр с этим столбцом.Если вы можете помочь мне получить имя пользователя процесса без использования другого метода, это будет хорошо.

Спасибо.

Это то, что я улучшил.

DataTable dt = null;
    private void Form1_Load(object sender, EventArgs e)
    {
        var wmiQueryString = "SELECT * FROM Win32_Process";
        //  var wmiQueryString = "SELECT * FROM Win32_ComputerSystem";
        using (var searcher = new ManagementObjectSearcher(wmiQueryString))
        using (var results = searcher.Get())
        {
            var query = from p in Process.GetProcesses()
                        join mo in results.Cast<ManagementObject>()
                        on p.Id equals (int)(uint)mo["ProcessId"]
                        select new
                        {
                            Process = p.ProcessName,
                            Path = (string)mo["ExecutablePath"],
                            CommandLine = (string)mo["CommandLine"],
                            User = GetProcessOwner(p.Id),
                            Description = mo["Description"]
                        };
            dt = ConvertToDataTable(query);
            dataGridView1.DataSource = dt;
        }

    }
    DataTable ConvertToDataTable<TSource>(IEnumerable<TSource> source)
    {
        var props = typeof(TSource).GetProperties();

        var dt = new DataTable();
        dt.Columns.AddRange(
          props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray()
        );

        source.ToList().ForEach(
          i => dt.Rows.Add(props.Select(p => p.GetValue(i, null)).ToArray())
        );
        Array a = source.ToArray();
        for (int i = 0; i < a.Length; i++)
        {

            var x = a.GetValue(i);
            //if (true)
            //{
            //    DataRow r = dt.NewRow();
            //    r.
            //}



            a.ToString();
        }

        return dt;
    }

    public string GetProcessOwner(int processId)
    {
        string query = "Select * From Win32_Process Where ProcessID = " + processId; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processList = searcher.Get(); foreach (ManagementObject obj in processList)
        {
            string[] argList = new string[] { string.Empty, string.Empty }; int returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList)); if (returnVal == 0)
            {
               // return DOMAIN\user 
               return argList[0]; 
            }
        }
        return "NO OWNER";
    }

Что у меня есть

TaskManager, что я хочу

1 Ответ

0 голосов
/ 23 мая 2018

Описание процесса происходит из описания файла.Вы можете получить его следующим образом:

private void Form1_Load(object sender, EventArgs e)
{
  var wmiQueryString = "SELECT * FROM Win32_Process";
  //  var wmiQueryString = "SELECT * FROM Win32_ComputerSystem";
  using (var searcher = new ManagementObjectSearcher(wmiQueryString))
  using (var results = searcher.Get())
  {
    var query = from p in Process.GetProcesses()
                join mo in results.Cast<ManagementObject>()
                on p.Id equals (int)(uint)mo["ProcessId"]
                select new
                {
                  Process = p.ProcessName,
                  Path = (string)mo["ExecutablePath"],
                  CommandLine = (string)mo["CommandLine"],
                  User = GetProcessOwner(p.Id),
                  Description = GetDescription((string)mo["ExecutablePath"])
                };
    dt = ConvertToDataTable(query);
    dataGridView1.DataSource = dt;
  }
}

string GetDescription(string executablePath)
{
  if (!File.Exists(executablePath))
  {
    return "No Description";
  }

  return FileVersionInfo.GetVersionInfo(executablePath).FileDescription;
}

Возможно, вам понадобится запустить вашу программу как администратор, чтобы показать подробную информацию обо всех процессах.

Почему вы хотите получить имя пользователядругим методом?

...