JavaScript实现真正可用的任务管理器

在Windows系统上,自从98系统以来就提供了脚本宿主(Windows Scripting Host 简称WSH)的功能,WSH可以加载并运行JS和VBS脚本,并支持调用系统的COM组件,在COM组件的支持下脚本可以轻松实现非常强大的功能。 很多人一提到JS可能就会想到网页,其实JS同样可以拥有主动权,做一些其他语言能做到的事情,甚至可以反过来去主宰浏览器,而不是被浏览器主宰着。 这篇文章将介绍一个建立在WSH平台上,通过JS实现的真正可用的Windows任务管理器。   
一:代码及注释   

专注于为中小企业提供做网站、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业太康免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了千余家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

 
 
 
 
  1. /*  
  2. JS任务管理器  
  3. By:X!ao_f  
  4. Mail:Xiao_f.mail@163.com  
  5. QQ:120000512  
  6. */ 
  7. //建立对象Shell对象,该对象提供了弹出提示框、运行进程、操作注册表等基本功能。  
  8. var shell = WScript.CreateObject("WScript.Shell");  
  9. //建立WMI对象,通过WMI可以实现系统管理,其中就包括了进程管理部分  
  10. var wmi = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\\cimv2");  
  11. //建立一个IE窗口,用于数据的输出  
  12. var browser = WScript.CreateObject("InternetExplorer.Application");  
  13. //微软的公共对话框组件,可以提供打开文件、选择字体、颜色选择功能  
  14. var commonDialog = WScript.CreateObject("MSComDlg.CommonDialog");  
  15. var window;  
  16.  
  17. function foreach(object, fn){  
  18.     var i = 0;  
  19.     for(var e = new Enumerator(object);!e.atEnd();e.moveNext()){  
  20.         fn(i++, e.item());  
  21.     }  
  22. }  
  23.  
  24. //初始化窗口  
  25. ~function(){  
  26.   browser.navigate("about:blank");  
  27.     browser.visible=false 
  28.     browser.document.write('\  
  29.     \  
  30.       \  
  31.         \  
  32.       \  
  33.       \  
  34.    ');  
  35.   //等待浏览器加载完毕  
  36.     while(browser.Busy) WScript.Sleep(100);  
  37.     //设置浏览器外观  
  38.     browser.document.title = "进程管理器" 
  39.     browser.toolBar = false;  
  40.     browser.statusBar = false;  
  41.     browser.fullScreen = true;  
  42.     var w = browser.width;  
  43.     var h = browser.height;  
  44.     browser.fullScreen = false;  
  45.     try{  
  46.     browser.width = w;  
  47.     browser.height = h;  
  48.     browser.left = 0;  
  49.     browser.top = 0;  
  50.     }catch(e){}  
  51.     window = browser.document.parentWindow;  
  52.   //创建按钮并绑定事件  
  53.     var button = browser.document.createElement("button");  
  54.     button.innerHTML = "新建进程..";  
  55.     button.onmousedown = open;  
  56.     browser.document.body.appendChild(button);  
  57.  
  58.     var button = browser.document.createElement("button");  
  59.     button.innerHTML = "刷新列表";  
  60.     button.onmousedown = refresh;  
  61.     browser.document.body.appendChild(button);  
  62.       
  63.     var divList = browser.document.createElement("div");  
  64.     divList.id = "divList";  
  65.     browser.document.body.appendChild(divList);  
  66.       
  67.     //结束进程的回调函数  
  68.     browser.document.__kill__ = function(pid){  
  69.         var process = wmi.ExecQuery("Select * From Win32_Process Where ProcessID = '"+pid+"'")  
  70.         foreach(process, function(i, o){  
  71.             o.terminate();  
  72.         });  
  73.     };  
  74.     browser.visible = true 
  75. }()  
  76.  
  77. //更新列表  
  78. function update(msg){  
  79.   browser.document.body.all.divList.innerHTML = msg;  
  80. }  
  81.  
  82. //新建进程  
  83. function open(){  
  84.   //因为第一次弹出对话框会被浏览器窗口挡住,隐藏一下浏览器可以解决这个问题  
  85.   if(!commonDialog.Filter){  
  86.     browser.visible=false 
  87.     browser.visible=true 
  88.   }  
  89.   //这里设置打开对话框的过滤规则  
  90.   commonDialog.Filter = "所有类型 (*.*)";  
  91.   commonDialog.DialogTitle = "进程管理器-选择文件";  
  92.   commonDialog.MaxFileSize = 260;  
  93.   commonDialog.CancelError = false;  
  94.   //通过延迟的方式打开对话框可以保证显示在最前端  
  95.   window.setTimeout(function(){  
  96.     commonDialog.ShowOpen();  
  97.     var path = commonDialog.Filename;  
  98.     //Path不为空可以视为按的确定按钮,用shell执行该路径  
  99.     if(path){  
  100.       shell.run('"' + path + '"');  
  101.       commonDialog.Filename = '';  
  102.       listProcess();  
  103.     }  
  104.   },10);  
  105. }  
  106.  
  107. //刷新  
  108. function refresh(){  
  109.   listProcess();  
  110. }  
  111.  
  112. //处理进程列表的主要函数  
  113. function listProcess(){  
  114.   //这里先通过WMI查询出所有的进程基本信息,有关WMI的使用方法可以查询相关资料,或通过cmd下wmic -?查看帮助信息,在这里不过多介绍。  
  115.     var process = wmi.ExecQuery("Select * from Win32_Process");  
  116.     var p1 = {};  
  117.     var p2 = {};  
  118.     //下面计算CPU占用率,引用:http://www.techish.net/2009/03/get-process-cpu-usage-using-wmi/  
  119.     var data1 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process");  
  120.     foreach(data1, function(i, object){  
  121.     p1[object.IDProcess] = object;  
  122.     });  
  123.     WScript.sleep(1000)  
  124.     var data2 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process");  
  125.     foreach(data2, function(i, object){  
  126.     p2[object.IDProcess] =    
  127.       (p1[object.IDProcess].PercentProcessorTime - object.PercentProcessorTime)/  
  128.       (p1[object.IDProcess].TimeStamp_Sys100NS - object.TimeStamp_Sys100NS) * 100;  
  129.     });  
  130.     //生成表格并更新  
  131.     var table = [];  
  132.     var memSum = 0;  
  133.     var cpuSum = 0;  
  134.     table.push(''+['序号','PID','名称','操作','CPU占用率','内存占用','路径'].join('')+'');  
  135.     foreach(process, function(i, object){  
  136.         var tr = [];  
  137.         var td = [];  
  138.         td.push(i);  
  139.         td.push(object.processid);  
  140.         td.push(object.name);  
  141.         td.push('结束');  
  142.         td.push((~~(p2[object.ProcessID]*100))/100);  
  143.         td.push((~~((object.WorkingSetSize/1024/1024)*100))/100+'MB');  
  144.         td.push((object.executablepath||'-')+' ');  
  145.         memSum+=(object.WorkingSetSize/1024/1024);  
  146.         if(object.processid!=0){  
  147.       cpuSum+=p2[object.ProcessID];  
  148.         }  
  149.         tr.push(''+td.join('')+'');  
  150.         table.push(tr);  
  151.     });  
  152.     table.push('内存占用:'+((~~(memSum*100))/100)+'MB'+',CPU占用率:'+((~~(cpuSum*100))/100)+'%');  
  153.     table=''+table.join('')+'' 
  154.     update(table);  
  155. }  
  156.  
  157. //这里要有一个循环,因为WScript进程与浏览器进程是分开的,如果不加循环当程序执行到这里WScript就结束了。  
  158. try{  
  159.     while(!browser.Closed) { try{refresh();}catch(e){}; WScript.Sleep(1000) };  
  160. }catch(e){}  

运行效果:

二.源码下载

/Files/xiao-f/Process.zip

运行方法:前提是windows操作系统,如果.js的打开方式没有特殊设置过,双击就可以运行了,如果关联过IDE,需要选择打开方式为"Microsoft Windows Based Script Host";

原文地址:http://www.cnblogs.com/xiao-f/archive/2012/03/24/2415407.html

网站题目:JavaScript实现真正可用的任务管理器
链接分享:http://www.hantingmc.com/qtweb/news2/9202.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联