用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实现的动态文字变换
Jul 28 Javascript
node.js中的events.emitter.listeners方法使用说明
Dec 10 Javascript
浅谈JavaScript Array对象
Dec 29 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
Vue.js中的组件系统
May 30 Javascript
vue实现拖拽的简单案例 不超出可视区域
Jul 25 Javascript
vue 中使用print.js导出pdf操作
Nov 13 Javascript
JS实现鼠标移动拖尾
Dec 27 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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 URL编码解码函数代码
2009/03/10 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
解析js如何获取css样式
2016/12/11 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
纽约海:Sea New York
2018/11/04 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
学期自我鉴定
2013/11/04 职场文书
5s推行计划书
2014/05/06 职场文书
关于python类SortedList详解
2021/09/04 Python