欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用Javascript實(shí)現(xiàn)Windows任務(wù)管理器的代碼

 更新時(shí)間:2012年03月27日 00:32:25   作者:  
在Windows系統(tǒng)上,自從98系統(tǒng)以來(lái)就提供了腳本宿主(Windows Scripting Host 簡(jiǎn)稱WSH)的功能,WSH可以加載并運(yùn)行JS和VBS腳本,并支持調(diào)用系統(tǒng)的COM組件,在COM組件的支持下腳本可以輕松實(shí)現(xiàn)非常強(qiáng)大的功能
很多人一提到JS可能就會(huì)想到網(wǎng)頁(yè),其實(shí)JS同樣可以擁有主動(dòng)權(quán),做一些其他語(yǔ)言能做到的事情,甚至可以反過(guò)來(lái)去主宰瀏覽器,而不是被瀏覽器主宰著。
這篇文章將介紹一個(gè)建立在WSH平臺(tái)上,通過(guò)JS實(shí)現(xiàn)的真正可用的Windows任務(wù)管理器。
一:代碼及注釋
復(fù)制代碼 代碼如下:

/*
JS任務(wù)管理器
By:X!ao_f
Mail:Xiao_f.mail@163.com
QQ:120000512
*/
//建立對(duì)象Shell對(duì)象,該對(duì)象提供了彈出提示框、運(yùn)行進(jìn)程、操作注冊(cè)表等基本功能。
var shell = WScript.CreateObject("WScript.Shell");
//建立WMI對(duì)象,通過(guò)WMI可以實(shí)現(xiàn)系統(tǒng)管理,其中就包括了進(jìn)程管理部分
var wmi = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\\cimv2");
//建立一個(gè)IE窗口,用于數(shù)據(jù)的輸出
var browser = WScript.CreateObject("InternetExplorer.Application");
//微軟的公共對(duì)話框組件,可以提供打開文件、選擇字體、顏色選擇功能
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);
//設(shè)置瀏覽器外觀
browser.document.title = "進(jìn)程管理器"
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;
//創(chuàng)建按鈕并綁定事件
var button = browser.document.createElement("button");
button.innerHTML = "新建進(jìn)程..";
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);

//結(jié)束進(jìn)程的回調(diào)函數(shù)
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;
}

//新建進(jìn)程
function open(){
//因?yàn)榈谝淮螐棾鰧?duì)話框會(huì)被瀏覽器窗口擋住,隱藏一下瀏覽器可以解決這個(gè)問(wèn)題
if(!commonDialog.Filter){
browser.visible=false
browser.visible=true
}
//這里設(shè)置打開對(duì)話框的過(guò)濾規(guī)則
commonDialog.Filter = "所有類型 (*.*)";
commonDialog.DialogTitle = "進(jìn)程管理器-選擇文件";
commonDialog.MaxFileSize = 260;
commonDialog.CancelError = false;
//通過(guò)延遲的方式打開對(duì)話框可以保證顯示在最前端
window.setTimeout(function(){
commonDialog.ShowOpen();
var path = commonDialog.Filename;
//Path不為空可以視為按的確定按鈕,用shell執(zhí)行該路徑
if(path){
shell.run('"' + path + '"');
commonDialog.Filename = '';
listProcess();
}
},10);
}

//刷新
function refresh(){
listProcess();
}

//處理進(jìn)程列表的主要函數(shù)
function listProcess(){
//這里先通過(guò)WMI查詢出所有的進(jìn)程基本信息,有關(guān)WMI的使用方法可以查詢相關(guān)資料,或通過(guò)cmd下wmic -?查看幫助信息,在這里不過(guò)多介紹。
var process = wmi.ExecQuery("Select * from Win32_Process");
var p1 = {};
var p2 = {};
//下面計(jì)算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>'+['序號(hào)','PID','名稱','操作','CPU占用率','內(nèi)存占用','路徑'].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);">結(jié)束</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>內(nèi)存占用:'+((~~(memSum*100))/100)+'MB'+',CPU占用率:'+((~~(cpuSum*100))/100)+'%</td></tr>');
table='<table width=100% border=1>'+table.join('')+'</table>'
update(table);
}

//這里要有一個(gè)循環(huán),因?yàn)閃Script進(jìn)程與瀏覽器進(jìn)程是分開的,如果不加循環(huán)當(dāng)程序執(zhí)行到這里WScript就結(jié)束了。
try{
while(!browser.Closed) { try{refresh();}catch(e){}; WScript.Sleep(1000) };
}catch(e){}

運(yùn)行效果:

二.源碼下載
Process.rar
運(yùn)行方法:前提是windows操作系統(tǒng),如果.js的打開方式?jīng)]有特殊設(shè)置過(guò),雙擊就可以運(yùn)行了,如果關(guān)聯(lián)過(guò)IDE,需要選擇打開方式為"Microsoft Windows Based Script Host";

相關(guān)文章

  • JavaScript之解構(gòu)賦值的理解

    JavaScript之解構(gòu)賦值的理解

    今天小編就為大家分享一篇關(guān)于JavaScript之解構(gòu)賦值的理解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 淺談js中同名函數(shù)和同名變量的執(zhí)行問(wèn)題

    淺談js中同名函數(shù)和同名變量的執(zhí)行問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談js中同名函數(shù)和同名變量的執(zhí)行問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 微信小程序?qū)崿F(xiàn)上傳圖片的功能

    微信小程序?qū)崿F(xiàn)上傳圖片的功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳圖片的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JavaScript函數(shù)之call、apply以及bind方法案例詳解

    JavaScript函數(shù)之call、apply以及bind方法案例詳解

    這篇文章主要介紹了JavaScript函數(shù)之call、apply以及bind方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • javascript 樹控件 比較好用

    javascript 樹控件 比較好用

    構(gòu)建樹控件的比較理想的一種方法是用ul、li這種簡(jiǎn)單的標(biāo)簽組合來(lái)實(shí)現(xiàn),但是你如果想實(shí)現(xiàn)復(fù)雜一點(diǎn)的比如要節(jié)點(diǎn)可編輯、可拖動(dòng)、可更換風(fēng)格等等我想ExtJS是最好的選擇了。
    2009-06-06
  • JS合并兩個(gè)數(shù)組的方法詳解

    JS合并兩個(gè)數(shù)組的方法詳解

    這篇文章主要詳細(xì)介紹了JS合并兩個(gè)數(shù)組的方法,文中有詳細(xì)的代碼示例,對(duì)我們學(xué)習(xí)JS有一定的幫助,感興趣的同學(xué)可以參考一下
    2023-06-06
  • js特效,頁(yè)面下雪的小例子

    js特效,頁(yè)面下雪的小例子

    js特效,頁(yè)面下雪的小例子,需要的朋友可以參考一下
    2013-06-06
  • JS驗(yàn)證IP,子網(wǎng)掩碼,網(wǎng)關(guān)和MAC的方法

    JS驗(yàn)證IP,子網(wǎng)掩碼,網(wǎng)關(guān)和MAC的方法

    這篇文章主要介紹了JS驗(yàn)證IP,子網(wǎng)掩碼,網(wǎng)關(guān)和MAC的方法,涉及javascript正則表達(dá)式的相關(guān)使用技巧,需要的朋友可以參考下
    2015-07-07
  • 清除div下面的所有標(biāo)簽的方法

    清除div下面的所有標(biāo)簽的方法

    清除標(biāo)簽的方法有很多,下面有個(gè)不錯(cuò)的示例可以清楚div下面的所有標(biāo)簽,需要的朋友可以參考下
    2014-02-02
  • js實(shí)現(xiàn)圖片推拉門效果代碼實(shí)例

    js實(shí)現(xiàn)圖片推拉門效果代碼實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)圖片推拉門效果代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論