首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>WINFORM>使用C#制做进程监视器,可查看进程的各项基本信息
使用C#制做进程监视器,可查看进程的各项基本信息
来源: 发布时间:2008-03-25 发布人: 浏览: 人次   字体: [ ]  

1)可以查看进程的各项基本信息,如cpu,内存,父进程,执行路径,创建者等

2)可以中止进程,创建新进程

3)可以配置目标进程,配置刷新速度

最终效果图:

(以下给出部分代码,其余像进程的创建、中止等,使用process类将很容易实现)

1)使用wmi获取父进程id,进程创建者

(注意,使用wmi获得的内容,不宜循环刷新,这样代价比较大)

添加命名空间:

using System.Management;

 


        
/// <summary>
        
/// 使用Wmi获取指定进程的创建者等信息
        
/// </summary>
        
/// <param name="pID">进程ID</param>

        private void FillDetailUseWmi(int pID)
        
{
            ManagementObjectSearcher searcher 
= new ManagementObjectSearcher("Select * From Win32_Process Where ProcessID=" + pID);
            ManagementObjectCollection moc 
= searcher.Get();

            ManagementOperationObserver observer 
= new ManagementOperationObserver();
            HandleObjectReady hor 
= new HandleObjectReady();
            
//监测异步方法是否已成功返回
            observer.ObjectReady += new ObjectReadyEventHandler(hor.Done);

            
foreach (ManagementObject mo in moc)
            
{
                
//异步调用该对象的GetOwner方法,获取进程创建者
                mo.InvokeMethod(observer, "GetOwner"null);
                
//等待异步调用返回
                while (!hor.Complete)
                
{
                    System.Threading.Thread.Sleep(
500);
                }


                
string user = "";
                
//判断获取用户名的操作是否成功
                if (hor.Obj["returnValue"].ToString() == "0")
                
{
                    user 
= hor.Obj.Properties["User"].Value.ToString();
                }

                
//判断字典中是否已移除该项
                if (!this.mDict.ContainsKey(pID))
                
{
                    
return;
                }

                
if (mo["ParentProcessID"!= null && this.mDict.ContainsKey(Convert.ToInt32(mo["ParentProcessID"])))
                
{
                    
//根据父进程ID获取父进程名称
                    this.mDict[pID].ParentProce = this.mDict[Convert.ToInt32(mo["ParentProcessID"])].ProceName;
                }

                
this.mDict[pID].Creator = user;

                
//触发刷新进程详细信息事件
                if (this.HandleDetailList != null)
                
{
                    
this.HandleDetailList(this.mDict[pID]);
                }

            }


            
//释放资源
            searcher.Dispose();
            searcher 
= null;
            moc.Dispose();
            moc 
= null;
            observer 
= null;
            hor 
= null;
        }



    
/// <summary>
    
/// 该类用于监测Wmi异步调用方法是否已经返回
    
/// </summary>

    public class HandleObjectReady
    
{
        
private bool complete = false;
        
private ManagementBaseObject obj;

        
public void Done(object sender, ObjectReadyEventArgs e)
        
{
            complete 
= true;
            obj 
= e.NewObject;
        }


        
public bool Complete
        
{
            
get
            
{
                
return complete;
            }

        }


        
public ManagementBaseObject Obj
        
{
            
get
            
{
                
return obj;
            }

        }

    }


 

 

2)使用性能计数器计算cpu利用率

2.1)计算过程

//通过计数器获取idle空闲进程cpu占用率r1

//通过process类的TotalProcessorTime属性获取各进程的cpu时间,求和,得各进程(除空闲进程idle,该进程无法通过process类获得cpu时间)cpu时间和t1

//通过t1/(100-r1)得到总cpu时间t

//对各进程,通过TotalProcessorTime获得进程cpu时间tnew,计算:

(Tnew-told)/t,即得该进程的cpu占用率,其中told是程序中记录的该进程上一次的TotalProcessorTime

 

2.2)关于性能计数器

系统会为每个进程分配一个计数器,通过

new PerformanceCounter("Process", "% Processor Time", "进程名称")实例化该计数器,使用计数器对象的NextValue方法可以得到进程占用cpu的百分比(第一次调用NextValue获取的值都为0,之后就没问题了,这个要注意)。

 

2.3)Idle进程的含义

Idle意为懒散的、无所事事。事实上,idle不能算着一个进程,它用于表示cpu空闲资源,它所占的比率越高,表示你的机器越空闲。

 

2.4)多核CPU或使用超线程技术的CPU

对于多核或使用超线程技术的cpu,根据计数器求得的idle进程cpu占用比率将超过100%,此时应将idlecpu利用率/总的cpu利用率,所得作为真正的idlecpu利用率。

 


共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·winfrom让弹出的MessageBox在指定时...
·vs2005实现关闭窗体的代码
·如何实现winform自动点击webbrowser...
·WinForm实现注册热键的代码
·Winform获取弹窗消息框中的文字代码
·winform中通过设置钩子监视鼠标移动
·winform中实现拖动图片的例子
·winform中如何获得TextBox光标位置?
·WebBrowser中html元素如何触发winfor...
·winform中DatagridView单元格动态绑...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·解决winform得不到GridView控
·winform实现窗体嵌入并操作可
·winform实现的仿Msn移动提示...
·WinForm实现渐变窗体效果代码
·winform实现类似QQ滑动面板的
·asp.net中当按下回车键时响应
·WinForm中TextBox控件循环自...
·winform如何保持TreeView节点
·图解winform用户控件添加自定
·dataset.GetChanges()为什么...
·winform中DatagridView单元格
·WebBrowser中html元素如何触...
·winform中如何获得TextBox光...
·winform中通过设置钩子监视鼠
·Winform获取弹窗消息框中的文
热 门 文 章
·asp.NET实现视频播放器功能代...
·winform中DatagridView单元格...
·在.net中利用webbrowser控件...
·WinForm编程开发实用技巧14则
·C#的简单图片透明处理代码以...
·如何实现winform自动点击webb...
·winform实现类似QQ滑动面板的...
·winform如何保持TreeView节点...
·如何做winform启动页面?
·图解winform用户控件添加自定...
·winform中如何获得TextBox光...
·Winform窗体之间传值的几种方...
·DataGridView控件如何实现分...
·asp.net中当按下回车键时响应...
·C#实现在Windows应用程序中支...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .