用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 图片预览效果 推荐
Dec 22 Javascript
JQuery Easyui Tree的oncheck事件实现代码
May 28 Javascript
最佳JS代码编写的14条技巧
Jan 09 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
Dec 04 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
整理JavaScript创建对象的八种方法
Nov 03 Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 Javascript
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
js时间戳与日期格式之间转换详解
Dec 11 Javascript
基于input动态模糊查询的实现方法
Dec 12 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
js实现网页随机验证码
Oct 19 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
php 无法载入mysql扩展
2010/03/12 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
浅析PHP Socket技术
2013/08/02 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
vue axios整合使用全攻略
2018/05/24 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
使用python接入微信聊天机器人
2020/03/31 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python实现字符串和数字拼接
2020/03/02 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
软件测试笔试题
2012/10/25 面试题
大家检讨书5000字
2014/02/03 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书