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


Posted in Javascript onMarch 27, 2012

很多人一提到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){}

运行效果:

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

二.源码下载
Process.rar
运行方法:前提是windows操作系统,如果.js的打开方式没有特殊设置过,双击就可以运行了,如果关联过IDE,需要选择打开方式为"Microsoft Windows Based Script Host";
Javascript 相关文章推荐
javascript继承之为什么要继承
Nov 10 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
标准的js无缝滚动效果
Aug 30 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
详解vue axios用post提交的数据格式
Aug 07 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
layer.js之回调销毁对话框的例子
Sep 11 Javascript
vue项目中锚点定位替代方式
Nov 13 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
Mar 26 #Javascript
获取服务器传来的数据 用JS去空格的正则表达式
Mar 26 #Javascript
jquery星级插件、支持页面中多次使用
Mar 25 #Javascript
JQuery实现倒计时按钮的实现代码
Mar 23 #Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 #Javascript
jQuery中将函数赋值给变量的调用方法
Mar 23 #Javascript
ExtJs使用总结(非常详细)
Mar 22 #Javascript
You might like
探讨如何把session存入数据库
2013/06/07 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
php获取远程文件内容的函数
2015/11/02 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
2种jQuery 实现刮刮卡效果
2015/02/01 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
python实现超市商品销售管理系统
2019/11/22 Python
Python流程控制语句的深入讲解
2020/06/15 Python
python实现图像外边界跟踪操作
2020/07/13 Python
python用Configobj模块读取配置文件
2020/09/26 Python
python实现三壶谜题的示例详解
2020/11/02 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
开学典礼感言
2014/02/16 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
优秀团员自我评价
2015/03/10 职场文书