自己的Win7小工具(二)———WMI实现实时流量显示

上文

 

上次学习了Win7小工具基本结构,实现了实时刷新随机数。这次要做一个真正可以用的东西,显示CPU使用率和网卡实时流量。

先介绍一个别人写好的小工具,multiMeter。

比较不错了只是太大了,不适合长期显示在最上面。官方的网址是http://sfkilla.com/。但是小工具是加密的,不太容易看到源码。

 

 

一、CPU使用率

    CPU的使用率很容易实现,win7自带了一个不错的CPU meter,可以直接看源码的。主要的数据来自System.Machine.CPU对象。具体的参考见MSDN,http://msdn.microsoft.com/en-us/library/aa359268(VS.85).aspx。具体的说就是:

 

监视CPU
CPUCount = System.Machine.CPUs.count;
var usageTotal = 0;
for (var i = 0; i < this.CPUCount; i++)
{
usageTotal
+= System.Machine.CPUs.item(i).usagePercentage;
}

CPUUsagePercentage
= Math.min(Math.max(0, usageTotal / this.CPUCount), 100).toFixed(2).toString() + " %";

这个可能是微软觉得比较在gadget里有用,所以内部就有方法实现。

 

 

二、网卡流量

    某软件的流量监控很受部分人欢迎,确实在桌面上实现准确的流量监控是很方便的。但是实现这个功能还是相当复杂的,好像涉及到复杂的内核编程,而且是不同系统还是有区别的。在网上发现了用WMI也可以监控流量,虽然可能比真正的落后一点,可能不是很准。不过完全够用了。完全参考见MSDN,http://msdn.microsoft.com/en-us/library/aa394340(VS.85).aspx.

    网上一些办法是错误的,无法实现实时刷新。这里我用的方法是WbemScripting.SWbemRefresher另外在JS中我直接GetObject没有成功,不知道为什么,于是用的是WbemScripting.SWbemLocator。如果谁用getObject成功了,或者知道怎么用,麻烦告诉我一下。

 

监视流量
refresher = new ActiveXObject("WbemScripting.SWbemRefresher"); //实现刷新的基础
wmi = new ActiveXObject("WbemScripting.SWbemLocator"); //用于连接wmi
cimv2 = wmi.ConnectServer(".","root\\CIMV2");//圆点.代表本机
objWMIService = wmi.ConnectServer(".","root\\WMI");
objRefreshableItem
= refresher.AddEnum(cimv2 ,"Win32_PerfRawData_Tcpip_NetworkInterface"); //向刷新器添加枚举




//其他函数略,关键更新
function update(){
try{
var nowbyte = 0;
refresher.Refresh();
var e = new Enumerator(objRefreshableItem.ObjectSet); //这里不能for……in,要这样用Enumerator
while(!e.atEnd()){
nowbyte
+= e.item().BytesTotalPerSec;
e.moveNext();
}
write(
"left" , ((nowbyte-lastbyte)/1024/REFRESH_INTERVAL).toFixed(2).toString() + " KB/s"); //write函数是自己写的,不过是写某个span的内容
//REFRESH_INTERVAL是自己设的常数,lastbyte是全局变量。
lastbyte
= nowbyte ;
clearTimeout(gadgetTimeout);
gadgetTimeout
= setTimeout("update()", REFRESH_INTERVAL);
}
catch{
write("debuger", "bug" + err.description);
}

这里一开始,我不知道JS里用WMI必须用Enumerator,以为和VBS一样,For Each就可以了。还有,Sidebar的调试很不好办,MSDN上有一篇文章,回来看一看。

 

最后,设置一下背景,基本上可以初步试用了。

 

看上去还凑合,呵呵

截图

 

就这么多了,还是比较有成就感的。下一次,要实现一个简易快速cmd功能,和按设置读取快捷菜单。

posted on 2010-10-27 13:08  杨水水  阅读(4336)  评论(1编辑  收藏  举报

导航