像过滤器一样查看任务管理器 [英] View like Task manager with filter

查看:80
本文介绍了像过滤器一样查看任务管理器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好


我正在尝试创建一个应用程序,我可以看到过程,路径,用户和描述,例如任务管理器详细信息,我已经制作但是我想要一个过滤器从图片路径中包含"Chrome"的源代码中搜索,或者如果您可以帮助
我获取描述,如任务管理器图像并使用此列过滤。如果您可以帮助我获取流程的用户名而不使用其他方法将会 对人好点。






谢谢。


这是我的改进。 

 DataTable dt = null; 
private void Form1_Load(object sender,EventArgs e)
{
var wmiQueryString =" SELECT * FROM Win32_Process" ;;
// var wmiQueryString =" SELECT * FROM Win32_ComputerSystem" ;;
使用(var searcher = new ManagementObjectSearcher(wmiQueryString))
using(var results = searcher.Get())
{
var query = from p in Process.GetProcesses()
加入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),
描述= 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() )
);
数组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();
}

返回dt;
}

公共字符串GetProcessOwner(int processId)
{
string query =" Select * From Win32_Process Where ProcessID =" + processId; ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); ManagementObjectCollection processList = searcher.Get(); foreach(processList中的ManagementObject obj)
{
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];
}
}
返回"NO OWNER";
}




< Alejandro Gomez Estudiante en apuros

解决方案

你好agg9505,


你可以循环通过指定列上的值DataGridView行。请查看以下文章。希望这会对你有所帮助。


DataGridView搜索&关注搜索行


Hi

I'm trying to make an app where I could see the process, path, user, and description like Task Manager Details, which I have made but I want a filter to search from the source code where the image path contains 'Chrome' for example or If you could help me to get the Description like the task manager image and filter with this column. If you can help me to get the username of the process without using the another method will  be nice.


Thank you.

This is what i have improved. 

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";
        }




Alejandro Gomez Estudiante en apuros

解决方案

Hi agg9505,

Well you can loop through the values DataGridView rows on the specified column. Please look into the below articles. Hope this will help you.

DataGridView Search & Focusing a Search row


这篇关于像过滤器一样查看任务管理器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆