在Windows系统上,自从98系统以来就提供了脚本宿主(Windows Scripting Host 简称WSH)的功能,WSH可以加载并运行JS和VBS脚本,并支持调用系统的COM组件,在COM组件的支持下脚本可以轻松实现非常强大的功能。 很多人一提到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('\
- \
- \
- \
- \
- \
- ');
- //等待浏览器加载完毕
- 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;
- try{
- browser.width = w;
- browser.height = h;
- browser.left = 0;
- browser.top = 0;
- }catch(e){}
- 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('
'); '+['序号','PID','名称','操作','CPU占用率','内存占用','路径'].join(' ')+' - foreach(process, function(i, object){
- var tr = [];
- var td = [];
- td.push(i);
- td.push(object.processid);
- td.push(object.name);
- td.push('结束');
- 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('
'); '+td.join(' ')+' - table.push(tr);
- });
- table.push('
'); 内存占用:'+((~~(memSum*100))/100)+'MB'+',CPU占用率:'+((~~(cpuSum*100))/100)+'% - table='
'+table.join('')+'
'- update(table);
- }
- //这里要有一个循环,因为WScript进程与浏览器进程是分开的,如果不加循环当程序执行到这里WScript就结束了。
- try{
- while(!browser.Closed) { try{refresh();}catch(e){}; WScript.Sleep(1000) };
- }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.mswzjz.cn/qtweb/news2/9202.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能