用Javascript实现Windows任务管理器

在Windows系统上,自从98系统以来就提供了脚本宿主(Windows Scripting Host 简称WSH)的功能,WSH可以加载并运行JS和VBS脚本,并支持调用系统的COM组件,在COM组件的支持下脚本可以轻松实现非常强大的功能。
很多人一提到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" οnclick="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||'-')+'&nbsp');
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){}

运行效果:

二.源码下载

/Files/xiao-f/Process.zip

运行方法:前提是windows操作系统,如果.js的打开方式没有特殊设置过,双击就可以运行了,如果关联过IDE,需要选择打开方式为"Microsoft Windows Based Script Host";


转载:http://blog.chinaunix.net/uid-16728139-id-3148405.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
javascript写的windows资源管理器<br>解压运行scripting.html,在IE6.0中打开(不能单独打开view.html这是一个子页面,必须由父页面调用)即可。<br>首发地址为51aspx<br>该源码在www.51aspx.com发布<br>本javascript程序是我自己利用业余时间做的,主要是编写javascript进一步对其进行控制。<br>因为时间的关系只提供了局部份功能,还有很多代码和函数都没有进行优化,(注释也较少)比如错误处理,浏览器嗅探等。<br>这里需要说明的是很少用到了innerHTML和innerTEXT两个方法,这是微软提供的专利方法,还没有得到W3C的认可,<br>在别的浏览器里面这两个方法不一定会被支持。<br>所以很多地方是用了DOM的方式进行处理。<br>首次的功能有:<br>1.查看磁盘,显示磁盘各种信息,显示磁盘占用率(图片)。<br>2.查看文件夹,文件,运行文件。<br>功能不是最重要的,本功能在windows资源管理器都能轻易做到,相信没人用这个做资源管理器吧,呵呵~~<br>主要是为了让javascript,DOM,CSS良好的呈现一种网页组织,真正的使<br>“结构”,“行为”,“样式”三者在(x)html里面完全分离开来。<br>着重使用了DOM模型编程。<br>javascript方面主要就是程序设计与功能的实现,主要还是用到了Scripting组件。<br>CSS就随便写了一点,反正2个页面,不过用的都是常用的一些属性。
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
Vue.js 是一个流行的前端框架,用于构建用户界面。它本身并不直接提供监督任务管理器进程的功能,但你可以使用其他工具来监督任务管理器进程。 在 Vue.js 中,你可以使用 Node.js 的 child_process 模块来执行外部命令,并监控相关的进程。你可以通过以下步骤来实现: 1. 首先,确保你的项目中已经安装了 Node.js。你可以在终端中运行 `node -v` 命令来验证 Node.js 是否已正确安装。 2. 在 Vue.js 项目中,使用 `child_process` 模块的 `spawn` 方法来执行任务管理器进程。例如,你可以在一个 Vue 组件的方法中添加以下代码: ```javascript const { spawn } = require('child_process'); const process = spawn('tasklist'); // 这里以Windows任务管理器为例 // 监听进程的输出,并将其打印到控制台 process.stdout.on('data', (data) => { console.log(`输出:${data}`); }); // 监听进程的错误信息,并将其打印到控制台 process.stderr.on('data', (data) => { console.error(`错误:${data}`); }); // 监听进程的退出事件,并将退出码打印到控制台 process.on('close', (code) => { console.log(`子进程退出,退出码:${code}`); }); ``` 这个例子中,我们使用 `spawn` 方法执行了 `tasklist` 命令,并监听了进程的输出、错误信息和退出事件。 请注意,这只是一个简单的示例,你可以根据你的具体需求修改代码。同时,根据你的操作系统和任务管理器,可能需要使用不同的命令来获取进程信息。 希望这个回答能对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值