用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 相关文章推荐
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
node.js中的fs.close方法使用说明
Dec 17 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
jQuery中wrapInner()方法用法实例
Jan 16 Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 Javascript
AngularJS 表达式详解及实例代码
Sep 14 Javascript
需要牢记的JavaScript基础知识
Sep 25 Javascript
vuejs绑定class和style样式
Apr 11 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
Aug 21 Javascript
js实现多个标题吸顶效果
Jan 08 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
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
详解php中反射的应用
2016/03/15 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python提示No module named images的解决方法
2014/09/29 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python中is和==的区别详解
2018/11/15 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
什么是数组名
2012/05/10 面试题
学校安全检查制度
2014/01/27 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
检讨书范文500字
2015/01/28 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
python可视化之颜色映射详解
2021/09/15 Python
nginx之内存池的实现
2022/06/28 Servers