DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 用Javascript實現Windows任務管理器的代碼
用Javascript實現Windows任務管理器的代碼
編輯:關於JavaScript     
很多人一提到JS可能就會想到網頁,其實JS同樣可以擁有主動權,做一些其他語言能做到的事情,甚至可以反過來去主宰浏覽器,而不是被浏覽器主宰著。
這篇文章將介紹一個建立在WSH平台上,通過JS實現的真正可用的Windows任務管理器。
一:代碼及注釋
復制代碼 代碼如下:
/*
JS任務管理器
By:X!ao_f
Mail:[email protected]
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){}

運行效果:

二.源碼下載
Process.rar
運行方法:前提是windows操作系統,如果.js的打開方式沒有特殊設置過,雙擊就可以運行了,如果關聯過IDE,需要選擇打開方式為"Microsoft Windows Based Script Host";
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved