设为首页 收藏本站
查看: 893|回复: 0

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

[复制链接]

尚未签到

发表于 2015-5-15 05:34:38 | 显示全部楼层 |阅读模式
  接上文。
  
  上次学习了Win7小工具基本结构,实现了实时刷新随机数。这次要做一个真正可以用的东西,显示CPU使用率和网卡实时流量。
  先介绍一个别人写好的小工具,multiMeter。
DSC0000.png DSC0001.png
  比较不错了只是太大了,不适合长期显示在最上面。官方的网址是http://sfkilla.com/。但是小工具是加密的,不太容易看到源码。
  
  
  一、CPU使用率
  CPU的使用率很容易实现,win7自带了一个不错的CPU meter,可以直接看源码的。主要的数据来自System.Machine.CPU对象。具体的参考见MSDN,http://msdn.microsoft.com/en-us/library/aa359268(VS.85).aspx。具体的说就是:
  


DSC0002.gif DSC0003.gif 监视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功能,和按设置读取快捷菜单。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-67012-1-1.html 上篇帖子: Win7系统重启网卡批处理 下篇帖子: 打造不死系统--利用VHD将Win7安装到文件,以及父子系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表