作家
登录

用Javascript实现Windows任务管理器的代码

作者: 来源:www.28hudong.com 2013-03-30 00:31:04 阅读 我要评论

很多人一提到JS可能就会想到网页,其实JS同样可以拥有主动权,做一些其他语言能做到的事情,甚至可以反过来去主宰浏览器,而不是被浏览器主宰着。 这篇文章将介绍一个建立在WSH平台上,通过JS实现的真正可用的Windows任务管理器。 一:代码及注释 复制代码 代码如下: /* JS任务管理器 By:X!ao_f Mail:Xiao_f.mail@163.com QQ:120000512 */ //建立对象Shell对象,该对象提供了弹出提示框、运行进程、操作注册表等基本功能。 var shell = WScript.CreateObject("WScript.Shell"); //建立WMI对象,通过WMI可以实现系统管理,其中就包括了进程管理部分 var wmi = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2"); //建立一个IE窗口,用于数据的输出 var browser = WScript.CreateObject("InternetExplorer.Application"); //微软的公共对话框组件,可以提供打开文件、选择字体、颜色选择功能 var commonDialog = WScript.CreateObject("MSComDlg.CommonDialog"); var window; function foreach(object, fn){ var i = 0; for(var e = new Enumerator(object);!e.atEnd();e.moveNext()){ fn(i++, e.item()); } } //初始化窗口 ~function(){ browser.navigate("about:blank"); browser.visible=false browser.document.write(' <HTML> <head> <style> *{font:14px arial;margin:0;padding:3px;} </style> </head> <BODY></BODY> </HTML>'); //等待浏览器加载完毕 while(browser.Busy) WScript.Sleep(100); //设置浏览器外观 browser.document.title = "进程管理器" browser.toolBar = false; browser.statusBar = false; browser.fullScreen = true; var w = browser.width; var h = browser.height; browser.fullScreen = false; browser.width = w; browser.height = h; browser.left = 0; browser.top = 0; window = browser.document.parentWindow; //创建按钮并绑定事件 var button = browser.document.createElement("button"); button.innerHTML = "新建进程.."; button.onmousedown = open; browser.document.body.appendChild(button); var button = browser.document.createElement("button"); button.innerHTML = "刷新列表"; button.onmousedown = refresh; browser.document.body.appendChild(button); var divList = browser.document.createElement("div"); divList.id = "divList"; browser.document.body.appendChild(divList); //结束进程的回调函数 browser.document.__kill__ = function(pid){ var process = wmi.ExecQuery("Select * From Win32_Process Where ProcessID = '"+pid+"'") foreach(process, function(i, o){ o.terminate(); }); }; browser.visible = true }() //更新列表 function update(msg){ browser.document.body.all.divList.innerHTML = msg; } //新建进程 function open(){ //因为第一次弹出对话框会被浏览器窗口挡住,隐藏一下浏览器可以解决这个问题 if(!commonDialog.Filter){ browser.visible=false browser.visible=true } //这里设置打开对话框的过滤规则 commonDialog.Filter = "所有类型 (*.*)"; commonDialog.DialogTitle = "进程管理器-选择文件"; commonDialog.MaxFileSize = 260; commonDialog.CancelError = false; //通过延迟的方式打开对话框可以保证显示在最前端 window.setTimeout(function(){ commonDialog.ShowOpen(); var path = commonDialog.Filename; //Path不为空可以视为按的确定按钮,用shell执行该路径 if(path){ shell.run('"' + path + '"'); commonDialog.Filename = ''; listProcess(); } },10); } //刷新 function refresh(){ listProcess(); } //处理进程列表的主要函数 function listProcess(){ //这里先通过WMI查询出所有的进程基本信息,有关WMI的使用方法可以查询相关资料,或通过cmd下wmic -?查看帮助信息,在这里不过多介绍。 var process = wmi.ExecQuery("Select * from Win32_Process"); var p1 = {}; var p2 = {}; //下面计算CPU占用率,引用:http://www.techish.net/2009/03/get-process-cpu-usage-using-wmi/ var data1 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process"); foreach(data1, function(i, object){ p1[object.IDProcess] = object; }); WScript.sleep(1000) var data2 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process"); foreach(data2, function(i, object){ p2[object.IDProcess] = (p1[object.IDProcess].PercentProcessorTime - object.PercentProcessorTime)/ (p1[object.IDProcess].TimeStamp_Sys100NS - object.TimeStamp_Sys100NS) * 100; }); //生成表格并更新 var table = []; var memSum = 0; var cpuSum = 0; table.push('<tr><td>'+['序号','PID','名称','操作','CPU占用率','内存占用','路径'].join('</td><td>')+'</td></tr>'); foreach(process, function(i, object){ var tr = []; var td = []; td.push(i); td.push(object.processid); td.push(object.name); td.push('<span style="color:red;cursor:pointer" onclick="document.__kill__('+object.processid+'); this.parentNode.parentNode.removeNode(true);">结束</span>'); td.push((~~(p2[object.ProcessID]*100))/100); td.push((~~((object.WorkingSetSize/1024/1024)*100))/100+'MB'); td.push((object.executablepath||'-')+' '); memSum+=(object.WorkingSetSize/1024/1024); if(object.processid!=0){ cpuSum+=p2[object.ProcessID]; } tr.push('<tr><td>'+td.join('</td><td>')+'</td></tr>'); table.push(tr); }); table.push('<tr><td colspan=8>内存占用:'+((~~(memSum*100))/100)+'MB'+',CPU占用率:'+((~~(cpuSum*100))/100)+'%</td></tr>'); table='<table width=100% border=1>'+table.join('')+'</table>' update(table); } //这里要有一个循环,因为WScript进程与浏览器进程是分开的,如果不加循环当程序执行到这里WScript就结束了。 try{ while(!browser.Closed) { try{refresh();}catch(e){}; WScript.Sleep(1000) }; }catch(e){} 运行效果: 二.源码下载 Process.rar 运行方法:前提是windows操作系统,如果.js的打开方式没有特殊设置过,双击就可以运行了,如果关联过IDE,需要选择打开方式为"Microsoft Windows Based Script Host";

  推荐阅读

  再谈javascript面向对象编程

另外这篇文章是一篇入门文章,我也是才开始学习Javascript,有一点心得,才想写一篇这样文章,文章中难免有错误的地方,还请各位不吝吐槽指正 吐槽Javascript 初次接触Javascript,这门语言的确会让很多正规军感到>>>详细阅读


本文标题:用Javascript实现Windows任务管理器的代码

地址:http://www.17bianji.com/kaifa2/JS/23516.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)