用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 相关文章推荐
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
js实现Tab选项卡切换效果
Jul 17 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 Javascript
js实现提交前对列表数据的增删改查
Jan 16 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 日期加减的类,很不错
2009/10/10 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
IE iframe的onload方法分析小结
2010/01/07 Javascript
jquery ajax abort()的使用方法
2010/10/28 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
react redux入门示例
2018/04/19 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python实现字典嵌套列表取值
2019/12/16 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python3正则模块re的使用方法详解
2020/02/11 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
工程造价自荐信
2013/10/09 职场文书
保安员岗位职责
2013/11/17 职场文书
大学生新学期计划书
2014/04/28 职场文书
我爱我家教学反思
2014/05/01 职场文书
环保建议书100字
2014/05/14 职场文书
企业口号大全
2014/06/12 职场文书