自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript實(shí)現(xiàn)真正可用的任務(wù)管理器

開發(fā) 前端
JS可以擁有主動(dòng)權(quán),做一些其他語言能做的事情,甚至可以反過來去主宰瀏覽器,下面看看如何通過JS實(shí)現(xiàn)的真正可用的Windows任務(wù)管理器。
在Windows系統(tǒng)上,自從98系統(tǒng)以來就提供了腳本宿主(Windows Scripting Host 簡稱WSH)的功能,WSH可以加載并運(yùn)行JS和VBS腳本,并支持調(diào)用系統(tǒng)的COM組件,在COM組件的支持下腳本可以輕松實(shí)現(xiàn)非常強(qiáng)大的功能。
很多人一提到JS可能就會(huì)想到網(wǎng)頁,其實(shí)JS同樣可以擁有主動(dòng)權(quán),做一些其他語言能做到的事情,甚至可以反過來去主宰瀏覽器,而不是被瀏覽器主宰著。
這篇文章將介紹一個(gè)建立在WSH平臺(tái)上,通過JS實(shí)現(xiàn)的真正可用的Windows任務(wù)管理器。 
 
一:代碼及注釋 
 
  1. /*  
  2. JS任務(wù)管理器  
  3. By:X!ao_f  
  4. Mail:Xiao_f.mail@163.com  
  5. QQ:120000512  
  6. */ 
  7. //建立對(duì)象Shell對(duì)象,該對(duì)象提供了彈出提示框、運(yùn)行進(jìn)程、操作注冊表等基本功能。  
  8. var shell = WScript.CreateObject("WScript.Shell");  
  9. //建立WMI對(duì)象,通過WMI可以實(shí)現(xiàn)系統(tǒng)管理,其中就包括了進(jìn)程管理部分  
  10. var wmi = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".""root\\cimv2");  
  11. //建立一個(gè)IE窗口,用于數(shù)據(jù)的輸出  
  12. var browser = WScript.CreateObject("InternetExplorer.Application");  
  13. //微軟的公共對(duì)話框組件,可以提供打開文件、選擇字體、顏色選擇功能  
  14. var commonDialog = WScript.CreateObject("MSComDlg.CommonDialog");  
  15. var window;  
  16.  
  17. function foreach(object, fn){  
  18.     var i = 0;  
  19.     for(var e = new Enumerator(object);!e.atEnd();e.moveNext()){  
  20.         fn(i++, e.item());  
  21.     }  
  22. }  
  23.  
  24. //初始化窗口  
  25. ~function(){  
  26.   browser.navigate("about:blank");  
  27.     browser.visible=false 
  28.     browser.document.write('\  
  29.     <HTML>\  
  30.       <head>\  
  31.         <style>\  
  32.           *{font:14px arial;margin:0;padding:3px;}\  
  33.         </style>\  
  34.       </head>\  
  35.       <BODY></BODY>\  
  36.    </HTML>');  
  37.   //等待瀏覽器加載完畢  
  38.     while(browser.Busy) WScript.Sleep(100);  
  39.     //設(shè)置瀏覽器外觀  
  40.     browser.document.title = "進(jìn)程管理器" 
  41.     browser.toolBar = false;  
  42.     browser.statusBar = false;  
  43.     browser.fullScreen = true;  
  44.     var w = browser.width;  
  45.     var h = browser.height;  
  46.     browser.fullScreen = false;  
  47.     try{  
  48.     browser.width = w;  
  49.     browser.height = h;  
  50.     browser.left = 0;  
  51.     browser.top = 0;  
  52.     }catch(e){}  
  53.     window = browser.document.parentWindow;  
  54.   //創(chuàng)建按鈕并綁定事件  
  55.     var button = browser.document.createElement("button");  
  56.     button.innerHTML = "新建進(jìn)程..";  
  57.     button.onmousedown = open;  
  58.     browser.document.body.appendChild(button);  
  59.  
  60.     var button = browser.document.createElement("button");  
  61.     button.innerHTML = "刷新列表";  
  62.     button.onmousedown = refresh;  
  63.     browser.document.body.appendChild(button);  
  64.       
  65.     var divList = browser.document.createElement("div");  
  66.     divList.id = "divList";  
  67.     browser.document.body.appendChild(divList);  
  68.       
  69.     //結(jié)束進(jìn)程的回調(diào)函數(shù)  
  70.     browser.document.__kill__ = function(pid){  
  71.         var process = wmi.ExecQuery("Select * From Win32_Process Where ProcessID = '"+pid+"'")  
  72.         foreach(process, function(i, o){  
  73.             o.terminate();  
  74.         });  
  75.     };  
  76.     browser.visible = true 
  77. }()  
  78.  
  79. //更新列表  
  80. function update(msg){  
  81.   browser.document.body.all.divList.innerHTML = msg;  
  82. }  
  83.  
  84. //新建進(jìn)程  
  85. function open(){  
  86.   //因?yàn)榈谝淮螐棾鰧?duì)話框會(huì)被瀏覽器窗口擋住,隱藏一下瀏覽器可以解決這個(gè)問題  
  87.   if(!commonDialog.Filter){  
  88.     browser.visible=false 
  89.     browser.visible=true 
  90.   }  
  91.   //這里設(shè)置打開對(duì)話框的過濾規(guī)則  
  92.   commonDialog.Filter = "所有類型 (*.*)";  
  93.   commonDialog.DialogTitle = "進(jìn)程管理器-選擇文件";  
  94.   commonDialog.MaxFileSize = 260;  
  95.   commonDialog.CancelError = false;  
  96.   //通過延遲的方式打開對(duì)話框可以保證顯示在最前端  
  97.   window.setTimeout(function(){  
  98.     commonDialog.ShowOpen();  
  99.     var path = commonDialog.Filename;  
  100.     //Path不為空可以視為按的確定按鈕,用shell執(zhí)行該路徑  
  101.     if(path){  
  102.       shell.run('"' + path + '"');  
  103.       commonDialog.Filename = '';  
  104.       listProcess();  
  105.     }  
  106.   },10);  
  107. }  
  108.  
  109. //刷新  
  110. function refresh(){  
  111.   listProcess();  
  112. }  
  113.  
  114. //處理進(jìn)程列表的主要函數(shù)  
  115. function listProcess(){  
  116.   //這里先通過WMI查詢出所有的進(jìn)程基本信息,有關(guān)WMI的使用方法可以查詢相關(guān)資料,或通過cmd下wmic -?查看幫助信息,在這里不過多介紹。  
  117.     var process = wmi.ExecQuery("Select * from Win32_Process");  
  118.     var p1 = {};  
  119.     var p2 = {};  
  120.     //下面計(jì)算CPU占用率,引用:http://www.techish.net/2009/03/get-process-cpu-usage-using-wmi/  
  121.     var data1 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process");  
  122.     foreach(data1, function(i, object){  
  123.     p1[object.IDProcess] = object;  
  124.     });  
  125.     WScript.sleep(1000)  
  126.     var data2 = wmi.ExecQuery("select * from Win32_PerfRawData_PerfProc_Process");  
  127.     foreach(data2, function(i, object){  
  128.     p2[object.IDProcess] =    
  129.       (p1[object.IDProcess].PercentProcessorTime - object.PercentProcessorTime)/  
  130.       (p1[object.IDProcess].TimeStamp_Sys100NS - object.TimeStamp_Sys100NS) * 100;  
  131.     });  
  132.     //生成表格并更新  
  133.     var table = [];  
  134.     var memSum = 0;  
  135.     var cpuSum = 0;  
  136.     table.push('<tr><td>'+['序號(hào)','PID','名稱','操作','CPU占用率','內(nèi)存占用','路徑'].join('</td><td>')+'</td></tr>');  
  137.     foreach(process, function(i, object){  
  138.         var tr = [];  
  139.         var td = [];  
  140.         td.push(i);  
  141.         td.push(object.processid);  
  142.         td.push(object.name);  
  143.         td.push('<span style="color:red;cursor:pointer" onclick="document.__kill__('+object.processid+'); this.parentNode.parentNode.removeNode(true);">結(jié)束</span>');  
  144.         td.push((~~(p2[object.ProcessID]*100))/100);  
  145.         td.push((~~((object.WorkingSetSize/1024/1024)*100))/100+'MB');  
  146.         td.push((object.executablepath||'-')+'&nbsp');  
  147.         memSum+=(object.WorkingSetSize/1024/1024);  
  148.         if(object.processid!=0){  
  149.       cpuSum+=p2[object.ProcessID];  
  150.         }  
  151.         tr.push('<tr><td>'+td.join('</td><td>')+'</td></tr>');  
  152.         table.push(tr);  
  153.     });  
  154.     table.push('<tr><td colspan=8>內(nèi)存占用:'+((~~(memSum*100))/100)+'MB'+',CPU占用率:'+((~~(cpuSum*100))/100)+'%</td></tr>');  
  155.     table='<table width=100% border=1>'+table.join('')+'</table>' 
  156.     update(table);  
  157. }  
  158.  
  159. //這里要有一個(gè)循環(huán),因?yàn)閃Script進(jìn)程與瀏覽器進(jìn)程是分開的,如果不加循環(huán)當(dāng)程序執(zhí)行到這里WScript就結(jié)束了。  
  160. try{  
  161.     while(!browser.Closed) { try{refresh();}catch(e){}; WScript.Sleep(1000) };  
  162. }catch(e){}  
運(yùn)行效果:

 

二.源碼下載

/Files/xiao-f/Process.zip

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

原文地址:http://www.cnblogs.com/xiao-f/archive/2012/03/24/2415407.html

【編輯推薦】

  1. 16個(gè)對(duì)開發(fā)者非常有用的JavaScript庫
  2. 深入理解JavaScript:設(shè)計(jì)模式之組合模式
  3. 深入理解JavaScript:設(shè)計(jì)模式之適配器模式
  4. 分享5個(gè)最佳的JavaScript日期處理類庫
  5. JavaScript表格組件加載速度測試

 

責(zé)任編輯:張偉 來源: X!ao_f的博客
相關(guān)推薦

2020-03-12 18:34:30

Windows 10Windows任務(wù)管理器

2023-11-24 08:21:08

下載任務(wù)管理器

2011-06-30 09:31:54

Chrome OS

2020-10-12 09:00:00

Firefox任務(wù)管理器瀏覽器

2015-08-18 13:25:12

PaaS服務(wù)架構(gòu)動(dòng)態(tài)擴(kuò)展

2022-04-13 09:43:50

VoltaJavaScript開發(fā)工具

2023-03-03 09:09:55

2021-03-05 14:02:51

LinuxWindows管理器

2011-06-06 09:57:43

任務(wù)管理器

2009-02-18 20:39:34

2022-01-21 07:15:19

微軟Windows 11任務(wù)管理器

2023-11-25 09:31:20

Go事件管理器

2020-08-10 08:26:26

Windows 10Windows微軟

2024-11-12 08:03:27

JavaScript管理器安全

2009-12-23 08:50:27

Fedora任務(wù)管理器

2009-06-17 08:41:45

Windows 7微軟操作系統(tǒng)

2023-12-19 22:48:22

2015-08-06 11:25:25

iOS9多任務(wù)iCarousel

2010-09-10 09:12:49

私有云

2009-08-04 14:36:00

ASP.NET分頁管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)