1 
  2 /**
  3  * @name	CeL function for WMI
  4  * @fileoverview
  5  * 本檔案包含了 Windows Management Instrumentation 的 functions。
  6  * @since	
  7  */
  8 
  9 
 10 if (typeof CeL === 'function')
 11 CeL.setup_module('application.OS.Windows.WMI',
 12 function(library_namespace, load_arguments) {
 13 
 14 //	nothing required
 15 
 16 
 17 
 18 /**
 19  * null module constructor
 20  * @class	WMI 的 functions
 21  */
 22 CeL.application.OS.Windows.WMI
 23 = function() {
 24 	//	null module constructor
 25 };
 26 
 27 /**
 28  * for JSDT: 有 prototype 才會將之當作 Class
 29  */
 30 CeL.application.OS.Windows.WMI
 31 .prototype = {
 32 };
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 //	WMI set	==================
 41 
 42 /*	2007/5/22 23:34:43
 43 	WMI: Windows Management Instrumentation
 44 	http://www.codecomments.com/archive298-2004-5-203306.html
 45 	http://msdn2.microsoft.com/en-us/library/Aa394616
 46 	http://msdn2.microsoft.com/en-us/library/aa389290.aspx
 47 	http://msdn2.microsoft.com/en-us/library/aa389763.aspx
 48 	http://msdn2.microsoft.com/en-us/library/aa393854.aspx	SWbemServices
 49 	http://msdn2.microsoft.com/en-us/library/ms525320.aspx
 50 	http://www.serverwatch.com/tutorials/article.php/1476831
 51 	http://www.serverwatch.com/tutorials/article.php/1476861
 52 	http://www.serverwatch.com/tutorials/article.php/1476871
 53 	http://www.serverwatch.com/tutorials/article.php/1476941
 54 
 55 string moniker:
 56 	[[/root/]cimv2:][from[.v]]	[/|\\]root[/|\\]
 57 
 58 object moniker:
 59 {
 60 	prefix:'WinMgmts:',	//	moniker prefix
 61 	security:'{impersonationLevel=impersonate}!',
 62 	computer:'.',	//	Computer string(localhost '.')
 63 	p:'cimv2',	//	'/root/' will auto added
 64 	path:'/root/cimv2',	//	Namespace e.g., \root\default
 65 
 66 	from:,	//	select from ~
 67 	where:,	//	select from where ~	** You MUST check the string yourself!! This function won't do it!
 68 	v:,	//	value to get
 69 	value:,	//	value used in moniker
 70 
 71 	flag:48,	//	flag to call SWbemServices.ExecQuery Method
 72 }
 73 
 74 	prefix+security+computer+path+':'+from+'='+value	http://msdn2.microsoft.com/en-us/library/aa389292.aspx
 75 
 76 TODO:
 77 多次呼叫最佳化
 78 */
 79 function WMI_data(moniker,func){	//	moniker, for each do function
 80 	var i,oWMIS,_m={
 81 			prefix:'WinMgmts:'
 82 			,security:'{impersonationLevel=impersonate}!'
 83 			,computer:'.'
 84 			,p:'cimv2'
 85 			,path:''
 86 			,from:''
 87 			,value:''
 88 			,v:''
 89 			,flag:48	//	32: wbemFlagForwardOnly + 16: wbemFlagReturnImmediately
 90 	};
 91 	if(!moniker)
 92 		moniker='';
 93 
 94 	if(typeof moniker=='string'){
 95 		//	parse moniker
 96 		_m.from=moniker;
 97 		//	取得path
 98 		if(i=_m.from.match(/^([^:]+):([^\/\\]*)$/)){
 99 			if(/^[\/\\]/.test(i[1]))_m.path=i[1];else _m.p=i[1];
100 			_m.from=i[2];
101 		}
102 		//	取得from[.v]
103 		if(i=_m.from.match(/^([^.]+)\.(.*)$/))_m.from=i[1],_m.v=i[2];
104 	}else for(i in moniker)_m[i]=moniker[i];
105 
106 	//	create object
107 	try{
108 		//with(_m)alert(prefix+security+'//'+computer+(path||'/root/'+p)+(value||value===0?':'+from+'='+value:''));
109 		with(_m)oWMIS=GetObject(prefix+security+'//'+computer+(path||'/root/'+p)
110 				//+(func||v?'':(from?':'+from+(value||value==0?'':'='+value):''))	//	有func||_m.v時無條件捨棄,到後面再搞。
111 				+(value||value===0?':'+from+'='+value:'')
112 		);
113 		//oLoc=new ActiveXObject("WbemScripting.SWbemLocator");oSvc=oLoc.ConnectServer(sComputer||null,"root\\default");oReg=oSvc.Get("StdRegProv");	//	http://msdn.microsoft.com/library/en-us/wmisdk/wmi/swbemobject_execmethod_.asp
114 	}catch(e){
115 		return;
116 		/*	useless?
117   try{
118    with(new ActiveXObject("WbemScripting.SWbemLastError"))	//	Error Handling
119     return {ProviderName:ProviderName,ParameterInfo:ParameterInfo,Operation:Operation,Description:Description};
120   }catch(_e){throw e;}
121 		 */
122 	}
123 	if(!func&&!_m.from)return oWMIS;
124 
125 	//	do search
126 	var oE;
127 	try{
128 		//	http://msdn2.microsoft.com/en-us/library/aa393866.aspx
129 		oE=oWMIS.ExecQuery('Select * From '+_m.from+(_m['where']?' Where '+_m.where:'')
130 				,'WQL'	//	String that contains the query language to be used. If specified, this value must be "WQL".
131 				,_m.flag
132 		);
133 	}catch(e){
134 		//	程式庫未登錄。
135 		//	此時 typeof oWMIS=='object'
136 		popErr(e,0,'WMI_data: error occurred!');
137 		//if(438!=(e.number&0xFFFF))return;
138 		return;	//	return {item:function(){}};	//	or return a object using wbemQueryFlagPrototype
139 	}
140 	oE=new Enumerator(oE);	//	wbemFlagForwardOnly:32+wbemFlagReturnImmediately:16
141 	//if(func)for(;!oE.atEnd()&&!func(oE.item());oE.moveNext());
142 	if(func)while(!oE.atEnd()&&!func(oE.item()))oE.moveNext();
143 	else return _m.v||_m.v===0?oE.item()?oE.item()[_m.v]:null:oE;
144 };
145 
146 /*	用在將 WMI date 轉成 javascript date, old: WMIDateStringToDate
147 	http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0907.mspx
148 	http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug05/hey0802.mspx
149 
150 TODO:
151 return ms
152 */
153 WMI_data.DateStringToDate=function(t){
154  if(!t)return new Date(0);
155  var m=(''+t).match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d+)?([+ \-]\d+)?$/);
156  //	http://msdn2.microsoft.com/en-us/library/474de325.aspx
157  return m?new Date(m[1],m[2]-1,m[3],m[4],m[5],m[6],m[7]*1e3):t;	//	locale會自己調整
158 };
159 
160 /*	用在取得 WMI object 之 property
161 	http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/other/wmi/
162 	http://msdn.microsoft.com/en-us/library/aa393741%28VS.85%29.aspx
163 */
164 WMI_data.getProperties = function(o, is_VBA, is_Date) {
165 	var oP = new Enumerator(o.Properties_), ph = {}, p;
166 	while (!oP.atEnd()) {
167 		o = p = oP.item();
168 
169 		if (0 && o.Name === 'IPAddress') {
170 			alert(p);
171 			alert('' + p + '\n[' + (typeof p) + ']\n'
172 					// +(new VBArray(p)).toArray()
173 					+ Object.prototype.toString.call(p));
174 			for (var i in p)
175 				alert('' + Object.prototype.toString.call(p[i]) + '\n' + i + '	' + p[i]);
176 		}
177 
178 		// 自動別日期
179 		if (typeof p == 'object' && /^\d{14}(\.\d+)?([+ \-]\d+)?$/.test('' + p))
180 			p = this.DateStringToDate(p);
181 		// 自動別 VBA
182 		else if (typeof p == 'unknown')
183 			// from VBA_to_JSA()
184 			try {
185 				p = new VBArray(p).toArray();
186 			} catch (e) {
187 			}
188 		;
189 		ph[o.Name] = p;
190 		oP.moveNext();
191 	}
192 
193 	// o=[];for(p in ph)o.push(p+': '+ph[p]);sl(o.join('\n'));
194 	return ph;
195 };
196 
197 
198 
199 /*	cause error!	requires Windows 2003 DNS
200 	http://forums.devshed.com/dns-36/dns-through-wmi-in-net-140427.html
201 	http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/dns/server/
202 	http://www.113317.com/blog/article.asp?id=543
203 	http://blogs.msdn.com/mpoulson/archive/2006/05/10/594950.aspx
204 	http://www.ureader.com/message/3258511.aspx
205 	http://www.scriptinganswers.com/forum/forum_posts.asp?TID=516&PID=3124
206 if(0){
207  var qHost='213.22.211.in-addr.arpa',qIP=WMI_data({p:'MicrosoftDNS',from:'MicrosoftDNS_PTRType',where:"OwnerName='"+qHost+"'"}).item();
208  alert(qIP.RecordData);
209 }
210 */
211 
212 
213 
214 
215 /*
216 	http://msdn2.microsoft.com/en-us/library/aa394239.aspx
217 	http://tech.163.com/05/0406/10/1GL8FUG200091589.html
218 
219 test:
220 with(getSysInfo())alert(Caption+' '+CSDVersion+' '+OtherTypeDescription+'(SP '+ServicePackMajorVersion+'.'+ServicePackMinorVersion+') [Version '+Version+']'
221 	+'\nWindowsDirectory: '+WindowsDirectory
222 	+'\nSystemDirectory: '+SystemDirectory
223 	+'\nFreePhysicalMemory: '+turnSI(FreePhysicalMemory)+'/'+turnSI(PhysicalMemory)+'B ('+PhysicalMemory+' bytes)'
224 	+'\nOSLanguage: '+OSLanguage+' (0x'+hex(OSLanguage)+')'	//	http://msdn.microsoft.com/zh-tw/library/system.globalization.cultureinfo%28VS.80%29.aspx
225 	+'\nCountryCode: '+CountryCode
226 	+'\nCodeSet: CP'+CodeSet	//	http://en.wikipedia.org/wiki/Code_page	http://msdn.microsoft.com/en-us/library/dd317756%28VS.85%29.aspx
227 	+'\nLocale: '+Locale
228 	+'\nCurrentTimeZone: '+gDate(CurrentTimeZone*60*1000)
229 	+'\nMUILanguages: '+MUILanguages
230 	+'\nBootUpTime: '+LastBootUpTime.toLocaleString()
231 	+'\nLocalDateTime: '+LocalDateTime.toLocaleString()
232 	+'\n系統運行 Uptime: '+gDate(Uptime)//+' ms'
233 	+'\n系統 counter: '+Timestamp+' s'
234 	+'\nCSName: '+CSName
235 	+'\nRegisteredUser: '+RegisteredUser
236 );WScript.Quit();
237 */
238 
239 getSysInfo[generateCode.dLK]='WMI_data';
240 function getSysInfo(){
241  var o=WMI_data('Win32_OperatingSystem').item(),r;
242  with(o)r={
243 	Caption:o.Caption.replace(/\s+$/,''),	//	系統
244 	Name:o.Name,
245 	CSDVersion:o.CSDVersion,
246 	ServicePackMajorVersion:o.ServicePackMajorVersion||(isNaN(o.ServicePackMajorVersion)?'':0),
247 	ServicePackMinorVersion:o.ServicePackMinorVersion||(isNaN(o.ServicePackMinorVersion)?'':0),
248 	OtherTypeDescription:o.OtherTypeDescription||'',
249 	Version:o.Version,	//	系統版本
250 
251 	WindowsDirectory:o.WindowsDirectory,
252 	SystemDirectory:o.SystemDirectory,
253 
254 	CSName:o.CSName,
255 	RegisteredUser:o.RegisteredUser,
256 
257 	CurrentTimeZone:o.CurrentTimeZone,
258 	//	系統最後一次啟動的時間
259 	//	see: WMI_data('Win32_PerfRawData_PerfOS_System.SystemUpTime')
260 	LastBootUpTime : WMI_data.DateStringToDate(o.LastBootUpTime),
261 	LocalDateTime : WMI_data.DateStringToDate(o.LocalDateTime),
262 	OSLanguage : o.OSLanguage,
263 	CountryCode : o.CountryCode,
264 	CodeSet : o.CodeSet,
265 	Locale : o.Locale,
266 	MUILanguages : VBA_to_JSA(o.MUILanguages),
267 
268 	FreePhysicalMemory : o.FreePhysicalMemory,
269 	PhysicalMemory : WMI_data('Win32_PhysicalMemory').item().Capacity,
270 
271 	// ms:	maybe null!
272 	//	http://msdn2.microsoft.com/en-us/library/aa394272.aspx
273 	//	http://snippets.dzone.com/posts/show/5472
274 	Uptime : (WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Object')
275 			- WMI_data('Win32_PerfRawData_PerfOS_System.SystemUpTime')) * 1e3
276 			/ WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Object'),
277 	//	顯示系統當下時間之印記 (NOT Uptime!)	這個運行時間是從性能計數器中獲得的64位整型數,不會出現在49.7天後溢出的情況。
278 	//	http://www.dx21.com/SCRIPTING/WMI/SUBCLASS.ASP?CID=201
279 	//	maybe NaN
280 	Timestamp : WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Sys100NS')
281 				/ WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Sys100NS')
282  };
283  //alert(WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Sys100NS')+'/'+WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Sys100NS'));
284 
285  if (!r.Uptime)
286 	 r.Uptime = (new Date() - r.LastBootUpTime);
287 
288  return r;
289 };
290 
291 
292 /*	http://support.microsoft.com/kb/328874/zh-tw
293 	http://msdn.microsoft.com/en-us/library/aa394520(VS.85).aspx
294 	http://msdn.microsoft.com/en-us/library/aa390456(VS.85).aspx	http://school.21tx.com/2004/06/16/11568_4.html
295 	If this method succeeds and the ActivationRequired property is 1 (one), the method returns 0 (zero). Otherwise, the method returns one of the WMI error constants.
296 
297 TODO:
298 判別 OS
299 */
300 getWinID[generateCode.dLK]='WMI_data';
301 function getWinID(pKey){
302  var o=WMI_data('Win32_WindowsProductActivation')
303 	,WshShell=WScript.CreateObject("WScript.Shell");
304  if(!o){alert('getWinID: Can not get Win32_WindowsProductActivation!');return;}
305  o=o.item();
306  if(o.ActivationRequired){
307   //	未啟用 Windows 前, 用錯誤序號會出錯
308   alert('Activation Required.');
309   return;
310  }
311  if(pKey)try{
312   //	SetProductKey: 修改產品金鑰CD-KEY序號, return 0:OK, else error
313   var e=o.SetProductKey(pKey.replace(/[\s\-]/g,''));
314   if(e)throw e;
315  }catch(e){
316   alert('Update failed for ['+pKey+']:\n'+e.description);	//	for old version 有可能:無效的操作, 此時需 delete OOBETimer registry value
317   //	TODO: delete OOBETimer registry value for XP 2600: 針對非 Windows XP SP1 或較新版 Windows XP 使用,來停用 Windows。
318   //WshShell.RegDelete("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WPAEvents\\OOBETimer");
319  }
320  return o.GetInstallationID(pKey);//||pKey;	//	無法以此方法獲得 ID
321 }
322 
323 //  ksp:
324 //alert(getWinID('Q9FDY-483HM-FV6RQ-2YQQQ-FD7J8'));WScript.Quit();
325 
326 // NTSU
327 //alert(getWinID('VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ'));WScript.Quit();
328 //alert(getWinID());
329 
330 //alert(getSysInfo().Caption)
331 //WScript.Quit();
332 
333 /*
334 http://163.19.54.70/student/SerialNumber.txt	大量授權
335 Windows XP Professional		VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ
336 Windows XP Prof, x64 Ed.	FG2Q3-QX4JG-FQMMB-8XXD6-34MRY
337 Office XP Applications		MXCVH-R3QQG-DMQ2M-KXPVQ-VKD6W
338 Office XP Suites		PCCKW-J8Y6T-P632P-9KW9P-PK88B
339 Office 2003 Applications	TF6RQ-TVG9Q-FVV74-GR4CP-2C2MB
340 Office 2003 Suites		WCMVH-XJGPJ-G9BKC-2KHY9-Y7V36
341 Office 2007 Applications	FJXGQ-RDQRY-Q2784-D89BP-M4MYJ
342 Office 2007 Suites		KX3T3-RYFP7-BMPKG-JXTQ2-9HWBJ
343 
344 DBXYD-TF477-46YM4-W74MH-6YDQ8 (CD)
345 W2JJW-4KYDP-2YMKW-FX36H-QYVD8 (FILES)
346 
347 'Microsoft Windows XP Professional 5.1.2600':'VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ'
348 
349 ksp:
350 Windows XP Professional		Q9FDY-483HM-FV6RQ-2YQQQ-FD7J8
351 Windows XP Prof, x64 Ed.	V3PP8-CD446-62H9J-3XHVF-K44F3
352 Windows Vista 的 KMS 認證方式,請參考	http://www.ks.edu.tw/KSnet_service.html#D
353 Office XP Suites		F86BJ-8PJWY-4P8QX-89FKF-896DT
354 Office 2003 Suites		F4RMR-DKBX3-2TV7F-9T8QJ-8MYQ6
355 Office 2007 Suites		M3JH3-4R8XX-R37F2-8D8H8-CBVD8
356 
357 高雄市?
358 Office 2007
359 W3GCD-YWK98-8F6BG-2CYBY-KVWBJ
360 
361 
362 以下序號皆為 VLK 大量授權序號:
363 HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT
364 MRX3F-47B9T-2487J-KWKMF-RPWBY
365 QC986-27D34-6M3TY-JJXP9-TBGMD
366 CM3HY-26VYW-6JRYC-X66GX-JVY2D
367 DP7CM-PD6MC-6BKXT-M8JJ6-RPXGJ
368 F4297-RCWJP-P482C-YY23Y-XH8W3
369 HH7VV-6P3G9-82TWK-QKJJ3-MXR96
370 
371 
372 
373 Windows XP Home Edition 
374 x:
375 BQFBV-9J43J-663WJ-T2VDY-X86HY
376 VTDBB-QVPCJ-33J2V-B9KV4-W2PBM
377 DJH7R-4CYKJ-GWYDC-7MXHJ-X9VJY
378 3GT36-XXFDW-JC676-P4FBF-2G6MJ
379 DGDGK-XVXWR-XJHYK-3688K-8HXYJ
380 CX7DD-4GX4Y-BTTR4-H88Y7-GQPWQ
381 J22CH-K4V7X-4G6H6-66JFG-737TK
382 CG3BH-RG63P-6H2MR-3DVPT-6WTXJ 
383 JPDR8-7X4G9-Q226K-B7VYR-HFHMD
384 W888Y-WM6YJ-DJQ27-WRB88-7FG96
385 
386 */
387 
388 
389 /*
390 	Win32_ComputerSystem:
391 	http://msdn2.microsoft.com/en-us/library/aa394224.aspx
392 
393 	Win32_NetworkAdapterConfiguration:
394 	http://msdn2.microsoft.com/en-us/library/aa394217.aspx
395 	http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/01_atnc_intro.mspx
396 	http://www.codeproject.com/vbscript/ipaddress.asp?df=100&forumid=3295&exp=0&select=123580
397 
398 
399 test:
400 with(get_net_info())alert(UserName+'\n'+Name+'\n'+Workgroup+'\n'+Domain+'\n'+BootupState);
401 
402 with(get_net_info(2)){
403  alert(UserName+'\n'+Name+'\n'+Domain+'\n'+BootupState+'\nAll '+netif.length+' interfaces get');
404  for(i=0;i<netif.length;i++)with(netif[i])
405   sl(Caption+'\n'
406 	+DNSDomain+'\n'
407 	+DHCPServer+'\n'
408 	+DNSHostName+'\n'
409 	+DNSServerSearchOrder+'\n'
410 	+IPSubnet+'\n'
411 	+DefaultIPGateway+'\n'
412 	+IPAddress+'\n'
413 
414 	+IPEnabled+'\n'
415 	+DHCPEnabled+'\n'
416 	+SettingID+'\n'
417 
418 	+MACAddress
419 	);
420 }
421 WScript.Quit();
422 
423 */
424 CeL.application.OS.Windows.WMI
425 .
426 /**
427  * 取得網卡設定的IP地址
428  * @param type	default type: ip setted interfaces only, 1: all interfaces, 2: 實體 net interfaces(網路卡,無線)
429  * @returns
430  * @example
431  * IP=get_net_info().netif[0].IPAddress[0];
432  * with(get_net_info())alert(UserName+'\n'+Name+'\n'+Workgroup+'\n'+Domain+'\n'+BootupState);
433  * @requires	WMI_data,VBA_to_JSA
434  * @memberOf	CeL.application.OS.Windows.WMI
435  */
436 get_net_info = function(type) {
437 	var r = WMI_data('Win32_ComputerSystem');
438 	if (!r || !r.item()) {
439 		r = null;
440 		throw new Error('Can not get Win32_ComputerSystem!\nIs this old system or the function is limited?');
441 		r = {};
442 	} else {
443 		r =
444 		// WMI_data({computer:IP||'.',from:'Win32_ComputerSystem'}).item()
445 		WMI_data.getProperties(r.item());
446 		if (!r.Workgroup)
447 			//	Windows 2000 and Windows NT: Workgroup is not available. Domain: If the computer is not part of a domain, then the name of the workgroup is returned.
448 			r.Workgroup = r.Domain;
449 	}
450 
451 /*	waste time
452  with(WMI_data('Win32_NTDomain').item()){
453   r.Caption=Caption,r.Description=Description;
454   if(!r.Name)r.Name=Name;
455  }
456 */
457 
458 	r.netif = [];
459 	WMI_data(
460 			{
461 				from : 'Win32_NetworkAdapterConfiguration',
462 				where : type === 1 ? ''
463 						// 這判別法不是很好
464 						//	DHCPEnabled 與 IPEnabled 可以同時為 TRUE
465 						: type === 2 ? 'MACAddress!=NULL AND (DHCPEnabled=TRUE OR IPEnabled=TRUE)'// OR IPXEnabled=TRUE
466 						: 'IPEnabled=TRUE' // 'NetEnabled=True': Vista only code?
467 			}, function(o) {
468 				// 在DHCP可能得到兩筆同IP之data.
469 				// MACAddress: getmac.exe, arp -a, nbtstat -a 192.168.0.1
470 				r.netif.push(WMI_data.getProperties(o));
471 			});
472 	return r;
473 };
474 
475 
476 
477 CeL.application.OS.Windows.WMI
478 .
479 /**
480  * get CIDR data
481  * @param {Number} CIDR	CIDR mask bits, 0~32
482  * @param {String} IP	IPv4, e.g., 1.2.3.4
483  * @return	CIDR data
484  * @since	2010/4/21 22:56:16
485  * @memberOf	CeL.application.OS.Windows.WMI
486  */
487 CIDR_to_IP = function (CIDR, IP) {
488 	if (isNaN(CIDR) || CIDR < 0 || CIDR > 32)
489 		return;
490 
491 	if (typeof IP === 'string')
492 		IP = IP.split('.');
493 	else if (!(IP instanceof Array))
494 		IP = [];
495 
496 	var i = 0, r = {
497 		//	geteway IP
498 		geteway : [],
499 		//	subnet mask
500 		mask : [],
501 		//	wildcard mask
502 		wildcard : [],
503 		//	subnet start IP,the entire network
504 		subnet : [],
505 		//	subnet end IP, broadcast address
506 		broadcast : [],
507 		//	Maximum Addresses, range IP count
508 		//	.count now = Maximum Subnets
509 		count : 1 << (32 - CIDR)
510 	};
511 
512 	for (; i < 4; i++) {
513 		if (CIDR > 7) {
514 			CIDR -= 8;
515 			r.wildcard[i] = 0;
516 			r.mask[i] = 255;
517 			r.subnet[i] = r.broadcast[i] = IP[i] || 0;
518 		} else if (CIDR) {
519 			r.broadcast[i] = (IP[i] || 0) | (r.wildcard[i] = CIDR = (1 << (8 - CIDR)) - 1);
520 			r.subnet[i] = (IP[i] || 0) & (r.mask[i] = 255 - CIDR);
521 			CIDR = 0;
522 		} else
523 			r.broadcast[i] = r.wildcard[i] = 255,
524 			r.subnet[i] = r.mask[i] = 0;
525 	}
526 
527 	if (r.count > 2)
528 		r.count -= 2;
529 	r.geteway = r.broadcast.join(',').split(',');
530 	//	[the entire network, .., geteway, broadcast address]
531 	r.geteway[3] -= 1;
532 
533 	//alert(r.geteway + '\n' + r.subnet + '\n' + r.broadcast + '\n' + r.wildcard + '\n' + r.subnet + '\n' + r.count);
534 	return r;
535 };
536 
537 
538 CeL.application.OS.Windows.WMI
539 .
540 /**
541  * 改變網卡的IP地址: change IP, set IP
542  * @param to_s	IP or {IP:''||[], CIDR:24||.CIDR_notation, Subnet:''||[], DNS:''||[], Gateway:254||[], GatewayOrder:''||[]}
543  * @param from	IP or netif No.
544  * @since
545  * 2009/5/7 0:24:5	加強
546  * 2010/3/3 10:41:17	a work version
547  * @see
548  * <a href="http://msdn.microsoft.com/en-us/library/aa394217%28VS.85%29.aspx" accessdate="2010/3/3 13:15">Win32_NetworkAdapterConfiguration Class (Windows)</a>
549  * <a href="http://www.yongfa365.com/item/Use-WMi-Change-IP-VBS-yongfa365.html" accessdate="2010/3/3 13:14">通过 WMI 改变网卡的IP地址 ChangeIP.vbs - 柳永法(yongfa365)'Blog</a>
550  * <a href="http://www.microsoft.com/technet/scriptcenter/topics/networking/01_atnc_intro.mspx">Automating TCP/IP Networking on Clients: Part 1: Introduction</a>
551  * <a href="http://www.dotblogs.com.tw/PowerHammer/archive/2008/03/24/2060.aspx" accessdate="2010/3/3 13:15">使用 WMI 更改IP、子網路遮罩、閘道、DNS - 強力鎯頭 VB BLOG - 點部落</a>
552  * Using NetSh.exe (no reboot required): <a href="http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/How~To+Change~Ip~Address.txt" accessdate="2010/3/3 13:12">WWW Tech Support/WinBatch/How To\Change Ip Address.txt</a>
553  * @example
554  * set_net_info({IP:'163.16.20.212',Gateway:254});
555  * sl(set_net_info({IP:'163.16.20.30',Gateway:254}));WScript.Quit();
556  * @requires	WMI_data,VBA_to_JSA,JSArrayToSafeArray,CIDR_to_IP
557  * @memberOf	CeL.application.OS.Windows.WMI
558  */
559 set_net_info = function (to_s, from) {
560 
561 	var _f = set_net_info, r, count, IPA, i = function(ip) {
562 		if (!(ip instanceof Array))
563 			if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(ip = '' + ip))
564 				ip = [ ip ];
565 			else
566 				return;
567 		return JSArrayToSafeArray(ip);
568 	};
569 
570 	if (typeof to_s === 'string'
571 			&& (r = to_s
572 					.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\/(\d{1,2}))?$/))) {
573 		count = r[1];
574 		to_s = {
575 			IP : count
576 		};
577 
578 		if ((r = r[3]) > 15) {
579 			r = _.CIDR_to_IP(r, count);
580 			to_s.Gateway = r.geteway.join('.');
581 			to_s.Subnet = r.mask.join('.');
582 		}
583 
584 	}else if (typeof to_s !== 'object' || to_s instanceof Array)
585 		// treat as IP
586 		to_s = {
587 			IP : to_s
588 		};
589 
590 	if (!isNaN(to_s.Gateway))
591 		to_s.Gateway = (to_s.IP instanceof Array ? to_s.IP.join('.') : to_s.IP)
592 				.replace(/\d+$/, to_s.Gateway);
593 
594 	//	SubnetMask: Subnet masks that complement the values in the IPAddress parameter. Example: 255.255.0.0. 
595 	if (!('Subnet' in to_s) || !isNaN(to_s.Subnet)) {
596 		r = _.CIDR_to_IP(to_s.Subnet || _f.CIDR_notation, to_s.IP);
597 		to_s.Subnet = r.subnet.join('.');
598 	}
599 
600 	//sl('set_net_info:\n[' + from + '] → [' + to_s.IP + '/' + to_s.Subnet + ']\nGateway: [' + to_s.Gateway + ']\nDNS: [' + ('DNS' in to_s ? to_s.DNS : _f.default_DNS) + ']');
601 	// return -1;
602 
603 	to_s.Subnet = i(to_s.Subnet);
604 	to_s.IP = i(to_s.IP);
605 	to_s.DNS = i('DNS' in to_s ? to_s.DNS : _f.default_DNS);
606 
607 	if ((to_s.Gateway = i(to_s.Gateway)))
608 		if (!to_s.GatewayOrder)
609 			for (i = 1, to_s.GatewayOrder = [ 0 ], r = to_s.Gateway instanceof Array ? to_s.Gateway.length
610 					: 0; i < r;)
611 				to_s.GatewayOrder.push(++i);
612 		else if (!(to_s.GatewayOrder instanceof Array))
613 			to_s.GatewayOrder = [ to_s.GatewayOrder ];
614 
615 	r = -1;
616 	count = 0;
617 	if (!from)
618 		from = 0;
619 
620 	WMI_data(
621 			{
622 				from : 'Win32_NetworkAdapterConfiguration',
623 				// 這判別法不是很好
624 				//	DHCPEnabled 與 IPEnabled 可以同時為 TRUE
625 				where : 'MACAddress!=NULL AND (IPEnabled=TRUE OR DHCPEnabled=TRUE)'// OR IPXEnabled=TRUE
626 			},
627 			function(o) {
628 				// alert('Get if: ' + o.Caption + '\n' + from + ',' + count);
629 				// 通常我們不會設定無線連線
630 				if(/wireless/i.test(o.Caption))
631 					return;
632 
633 				if (isNaN(from) || from === count++) {
634 				for (i = 0, IPA = from ? VBA_to_JSA(o.IPAddress) : [ 1 ]; i < IPA.length; i++) {
635 					if (!from || IPA[i] === from) {
636 						r = typeof to_s.IP === 'undefined' ? o.EnableDHCP()
637 								: o
638 										.EnableStatic(
639 												to_s.IP,
640 												typeof to_s.Subnet === 'undefined' ? o.IPSubnet
641 														: to_s.Subnet)
642 										|| typeof to_s.Gateway !== 'undefined'
643 										&& o.SetGateways(to_s.Gateway,
644 												to_s.GatewayOrder)
645 										|| typeof to_s.DNS !== 'undefined'
646 										&& o.SetDNSServerSearchOrder(to_s.DNS);
647 						//alert('Set if:\n'+o.Caption+'\nto: '+to_s.IP+'\nerrno: '+r);
648 							// TODO: error detection
649 							return 1;
650 						}
651 					}
652 				}
653 			});
654 
655 	// not found / error
656 	// http://msdn.microsoft.com/en-us/library/aa390383%28VS.85%29.aspx
657 	return r;
658 };
659 
660 CeL.application.OS.Windows.WMI
661 .
662 // default DNS
663 // 168.95.1.1,8.8.4.4
664 set_net_info.default_DNS = '8.8.8.8';
665 
666 CeL.application.OS.Windows.WMI
667 .
668 // http://en.wikipedia.org/wiki/CIDR_notation
669 set_net_info.CIDR_notation = 24;
670 
671 
672 
673 
674 
675 /*	get IP of Windows Host
676 	http://www.scriptinganswers.com/forum/forum_posts.asp?TID=516&PID=3124
677 	Wscript.Network
678 
679 ping:
680 	http://blog.blueshop.com.tw/hammerchou/archive/2006/07/08/32205.aspx
681 1.
682 GetObject("winmgmts:").Get("NetDiagnostics=@").Ping(strAddr, Ping)
683 2.
684 objCls = GetObject("winmgmts:\\" & strMachine & "\root\CIMV2").Get("NetDiagnostics")
685 objInPara = objCls.Methods_("Ping").inParameters.SpawnInstance_()
686 objInPara.Properties_("sInAddr") = "www.google.com.tw" // 設定 Ping 的位置
687 // Ping 為 方法 , ExecMethod 為 執行方法 ( 把參數送入執行 )
688 objOutPara = objWMIsvc.ExecMethod("NetDiagnostics=@", "Ping", objInPara)
689 // 取回輸出參數 ( Ping 的結果 ): objOutPara.ReturnValue = True 則 Ping 成功 , 反之則失敗
690 objOutPara.sOutArg
691 
692 
693 test:
694 var h='Public',ip=getIPofHost(h);alert(ip?h+':\n'+ip:'Computer [\\'+h+'] is unreachable!');
695 
696 */
697 //getIPofHost[generateCode.dLK]='WMI_data';
698 function getIPofHost(h) {
699 	var qIP = WMI_data( {
700 		from : 'Win32_PingStatus',
701 		where : "Address='" + h + "'"
702 	}).item();
703 	if (!qIP.StatusCode && qIP.StatusCode != null)
704 		return qIP.ProtocolAddress;
705 }
706 
707 //	終止進程	http://msdn2.microsoft.com/en-us/library/aa393907.aspx
708 //killProcess[generateCode.dLK]='WMI_data';
709 function killProcess(n, isPID) {
710 	var k = 0;
711 	if (typeof isPID == 'undefined')
712 		isPID = !isNaN(n);
713 	WMI_data('Win32_Process', function(p) {
714 		with (p)
715 		if (isPID)
716 			if (ProcessId == n) {
717 				Terminate();
718 				k = 1;
719 				return 1;
720 			} else if (Caption == n)
721 				Terminate(), k++;
722 	});
723 	return k;
724 }
725 
726 
727 /*	列舉進程	http://msdn2.microsoft.com/en-us/library/aa394372.aspx
728 
729 test:
730 alert(get_process()['explorer.exe'].CommandLine);
731 for(i=0,p=get_process();i<p.length;i++)with(p[i])
732  alert(i+' / '+p.length+'\n['+ProcessId+'] '+Caption+(Name==Caption?'':' ('+Name+')')+'\n'+(Description==Caption?'':Description+'\n')+CSName+'\n'
733 	+'Open files: '+HandleCount+'\n'
734 	//+OSName+'\n'
735 	+'memory: '+MinimumWorkingSetSize+'-'+MaximumWorkingSetSize+'\n'	//	memory pages visible to the process in physical RAM
736 	+'Time in kernel mode: '+KernelModeTime+' ms\n'+ExecutablePath+'\n'+CommandLine+'\n'+CreationDate.toLocaleString()
737 	);
738 */
739 //get_process[generateCode.dLK]='WMI_data';
740 function get_process() {
741 	var r = [];
742 	WMI_data('Win32_Process', function(p) {
743 		with (p)
744 		r[Caption] = r[r.push( {
745 			ProcessId : ProcessId,
746 			Caption : Caption,
747 			ExecutablePath : ExecutablePath,
748 			CommandLine : CommandLine,
749 			Name : Name, // ==Caption
750 			Description : Description, // ==Caption
751 			CSName : CSName,
752 			HandleCount : HandleCount,
753 			OSName : OSName,
754 			MinimumWorkingSetSize : MinimumWorkingSetSize,
755 			MaximumWorkingSetSize : MaximumWorkingSetSize,
756 			KernelModeTime : p.KernelModeTime / 1e5, //	100000ms
757 			CreationDate : WMI_data
758 			.DateStringToDate(CreationDate)
759 		}) - 1];
760 	});
761 	return r;
762 }
763 
764 
765 
766 /*	列舉服務
767 	http://msdn2.microsoft.com/en-us/library/aa394418.aspx
768 	http://www.microsoft.com/taiwan/technet/scriptcenter/topics/vista/indexer.mspx
769 
770 test:
771 alert(get_service()['Event Log'].Description);
772 for(i=0,s=get_service();i<s.length;i++){t=i+' / '+s.length;for(j in s[i])t+='\n'+j+': '+s[i][j];alert(t);}
773 */
774 //get_service[generateCode.dLK]='WMI_data';
775 function get_service() {
776 	var r = [];
777 	WMI_data('Win32_Service', function(s) {
778 		with (s)
779 		r[Caption] = r[r.push( {
780 			AcceptPause : AcceptPause,
781 			AcceptStop : AcceptStop,
782 			Caption : Caption,
783 			Description : Description,
784 			DisplayName : DisplayName,
785 			ExitCode : ExitCode,
786 			InstallDate : WMI_data.DateStringToDate(InstallDate),
787 			Name : Name,
788 			Pathname : Pathname,
789 			ProcessId : ProcessId,
790 			ServiceSpecificExitCode : ServiceSpecificExitCode,
791 			Started : Started,
792 			StartMode : StartMode,
793 			StartName : StartName,
794 			State : State,
795 			Status : Status,
796 			SystemName : SystemName
797 		}) - 1];
798 	});
799 	return r;
800 }
801 
802 
803 /*	http://msdn.microsoft.com/en-us/library/bb774148.aspx
804 WinShell.ShellExecute(appName, appArgs, appPath, "", 0);	http://msdn.microsoft.com/en-us/library/bb774148.aspx
805 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
806 <object runat="server" id="WinShell" scope="page" classid="clsid:13709620-C279-11CE-A49E-444553540000"></object>
807 <object runat="server" id="fso" scope="page" classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>
808 
809 http://windowssdk.msdn.microsoft.com/en-us/library/ms630425.aspx
810 WinShell.ShutdownWindows();	//	Open the Shutdown dialog	http://www.robvanderwoude.com/index.html
811 */
812 
813 
814 /*	2008/8/8 18:29:44
815 	run them with administrator rights	runs under administrator privileges.
816 帳戶控制	Windows Vista:使用軟體限制原則對抗未授權的軟體	http://www.microsoft.com/taiwan/technet/windowsvista/security/rstrplcy.mspx
817 http://4sysops.com/archives/vista%E2%80%99s-uac-how-to-elevate-scripts-vbscript-and-jscript/
818 http://blogs.msdn.com/aaron_margosis/archive/2007/07/01/scripting-elevation-on-vista.aspx
819 Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA	c:\windows\system32\control.exe /name Microsoft.UserAccounts	http://www.dashken.net/index.php?/archives/280-VBScript-Check-if-OS-is-Vista-and-Vistas-UAC-status.html
820 http://msdn.microsoft.com/en-us/magazine/cc163486.aspx
821 HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindowsCurrentVersionPoliciesSystem\ConsentPromptBehaviorAdmin	http://hsu.easynow.com.tw/index.php?load=read&id=28
822 http://vistavitals.blogspot.com/2008/02/logon-scripts-token-effort.html
823 runas	http://www.merawindows.com/Forums/tabid/324/forumid/82/postid/32458/scope/posts/Default.aspx
824 	http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html
825 
826 http://forums.techarena.in/vista-security/654643.htm
827 Set objShell = CreateObject("Shell.Application")
828 Set objFolder = objShell.Namespace("C:\")
829 Set objFolderItem = objFolder.ParseName("myhta.hta")
830 objFolderItem.InvokeVerb "runas"
831 
832 var WinShell=new ActiveXObject("Shell.Application"),p=location.pathname.replace(/[^\\]+$/,''),o=WinShell.Namespace(p).ParseName(location.pathname.slice(p.length));
833 o.InvokeVerb("runas");
834 
835 http://www.zaoxue.com/article/tech-28339_2.htm	http://www.lob.cn/vbs/20071126203237.shtml
836 
837 TODO:
838 對 prompt 回應不允許時的處理: 若想在受限的情況下使用?
839 不使用自訂程式	http://msdn.microsoft.com/en-us/library/bb776820(VS.85).aspx
840 */
841 function runas(p){
842  if(!p)p=typeof WScript=='object'?WScript.ScriptFullName:unescape(location.pathname);
843  var a={js:'wscript.exe',vbs:'wscript.exe',hta:'mshta.exe'},ext=p.match(/([^.]+)$/);
844  a=ext&&((ext=ext[1].toLowerCase()) in a)?a[ext]:'';
845  //	判斷是否有權限
846  if(!registryF.checkAccess('HKLM\\SOFTWARE\\')){
847   //	以管理者權限另外執行新的	It will get the UAC prompt if this feature is not disabled.
848   new ActiveXObject("Shell.Application").ShellExecute(a||p,a?p:'','','runas'/*,5*/);
849   //	執行完本身則退出
850   if(typeof WScript=='object')WScript.Quit();else if(typeof window=='object')window.close();
851  }
852 }
853 
854 
855 /*	JScript file: check owner, .exe file
856 	http://www.microsoft.com/taiwan/technet/scriptcenter/resources/qanda/nov04/hey1115.mspx
857 	Exec Method (Windows Script Host)	http://msdn.microsoft.com/en-us/library/ateytk4a(VS.85).aspx
858 
859 usage:
860 runProg(path): use WshShell.Exec, return [StdOut, StdErr, ExitCode]
861 runProg(path, 1): use WshShell.Exec, can get output by .StdOut.ReadAll(), or .StdErr.ReadAll()
862 runProg([path, WindowStyle, WaitonReturn],2): use WshShell.Run
863 runProg(script path, remote computer): use WshRemote
864 runProg(path, remote computer): use WMI
865 
866 TODO:
867 runProg([path, Verb],3): use Shell.Application InvokeVerb
868 runProg([path, arg1, arg2,..]): use Shell.Application.ShellExecute
869 
870 
871 example:
872 WScript.Echo(runProg('%COMSPEC% /U /c ""C:\\Program Files\\WinRAR\\Rar.exe" vt -scuc "F:\\CLAMP 01.rar""')[0]);
873 
874 
875 WshShell.Run(command, [WindowStyle 0-10], [WaitonReturn false: nowait & return 0, true: wait & return error code])
876 WshShell.Exec(),objFolderItem.InvokeVerb()
877 WshShell.Run('command /k ' + ドライブ +' | cd /D '+ パス);// cd で他ドライブへ移れないので。
878 */
879 //runProg[generateCode.dLK]='initWScriptObj';
880 function runProg(p,r){try{
881  var s;
882  if(!r||r===1||r===2)if(typeof (s=new ActiveXObject('WScript.Shell'))=='object'){
883   if(typeof p=='object'&&r===2)
884    r=s.Run(p[0],p[1],p[2]);
885   else if(s=s.Exec(p),r)r=s;
886   else with(s){
887    while(!Status)WScript.Sleep(80);
888    r=[StdOut.ReadAll(),StdErr.ReadAll(),ExitCode];
889   }
890   return r;
891  }else return;
892 
893  if(/^[^ ]+\.(j|vb)s$/i.test(p)){
894   s=(WScript.CreateObject('WSHController')).CreateScript(p,r);
895   s.Execute();
896   return s;
897  }
898 
899  s=GetObject("winmgmts:{impersonationLevel=impersonate}//"+(r||'.')+"/root/cimv2:Win32_Process");
900  //if(/^[^ ]+\.(j|vb)s$/i.test(p))p="wscript.exe "+p;
901  return s.Create(p/*,null,null,intProcessID*/);	//	Create 方法會讓這個指令碼在「遠端電腦」上執行。
902 }catch(e){
903  //popErr(e);
904  return e;
905 }}	//	function runProg
906 
907 
908 
909 /*	shutdown/reboot computer	2007/5/8-9 0:8:52
910 	http://www.robvanderwoude.com/index.html
911 	http://www.ericphelps.com/batch/samples/reboot.txt
912 
913 	http://www.semcase.com/docus/iis/prog_wmi_tut_03_01.htm	http://www.semcase.com/docus/iis/iis.htm
914 	http://support.microsoft.com/kb/913538	當您使用會讓列舉程式物件在 Microsoft Windows Server 2003 或 Microsoft Windows XP 用戶端電腦上進行內部複製的 Windows Management Instrumentation (WMI) 功能時,列舉程式物件於用戶端電腦尚未完成使用列舉程式物件的動作時,即遭取消。此外,WMI 功能還可能傳回錯誤碼。
915 
916 mode:
917 0	poweroff (if supported by the hardware)
918 null,1	reboot
919 	restart
920 	logoff
921 	shutdown
922 	suspend, sleep, hibernate
923 	lock
924 //	standby	http://www.tutorials-xe.com/SCRIPTING/Restart-service/
925 16	force
926 
927 	open the shutdown dialog
928 
929 time: seconds
930 */
931 var shutdownF;
932 setObjValue('shutdownF','poweroff,reboot,restart,logoff,shutdown,suspend,lock,force=16,dialog=32',1);
933 shutdown[generateCode.dLK]='initWScriptObj,shutdownF,Sleep';
934 function shutdown(mode,time/*,message*/){
935  if(isNaN(mode))mode=shutdownF.reboot;
936 
937  var f,sComputer="."
938 	,_s,s=function(t){
939 		if(t)return _s;
940 		if(time&&!_s)Sleep(time);
941 		_s=1;
942 	}
943 	,force=mode&shutdownF.force
944 	,sF=function(a){f={};for(i=0;i<a.length;i+=2)f[a[i]]=a[i+1];}
945 	,oWMIS
946 	;
947 
948  if((mode-=force)==shutdownF.dialog)try{
949   s();
950   WinShell.ShutdownWindows();
951   return;
952  }catch(e){}
953 
954  // way 1: WMI
955  sF([0,0,shutdownF.logoff,0,shutdownF.shutdown,1,shutdownF.reboot,2,shutdownF.force,4,shutdownF.poweroff,8]);
956  if(mode in f)try{	//	f.hasOwnProperty(mode)
957   f=f[mode]&f[force];
958   oWMIS=new Enumerator(
959 	 GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}//"+(sComputer||'.')+"/root/cimv2")
960 	 .ExecQuery("Select * from Win32_OperatingSystem")//Select * from Win32_OperatingSystem Where primary=true
961 	);
962   if(!oWMIS)throw 1;
963   s();
964   for(;!oWMIS.atEnd();oWMIS.moveNext()){
965    //oWMIS.item().Reboot();//.Shutdown();	//	force!
966    oWMIS.item().Win32Shutdown(f);//if()	//	http://msdn2.microsoft.com/en-us/library/aa394058.aspx
967   }
968   return;
969  }catch(e){}
970  // way 2: RUNDLL32 SHELL32.DLL, SHExitWindowsEx [n]
971  if(mode in f)try{WshShell.Run(" RUNDLL32 SHELL32.DLL,SHExitWindowsEx "+f[mode]);return;}catch(e){}
972 
973  // way 3: shutdown.exe utility
974  sF([shutdownF.logoff,'l',shutdownF.poweroff,'s',shutdownF.shutdown,'s',shutdownF.reboot,'r',shutdownF.dialog,'i']);
975  if(mode in f)try{WshShell.Run('%windir%\System32\shutdown.exe -'+f+(!time||s(1)?'':' -t '+time)+(force?' -f':''));return;}catch(e){}	//	-s or -r
976 
977  // way 4: rundll.exe
978  sF([shutdownF.logoff,'SHELL.DLL,RestartDialog',shutdownF.poweroff,'USER.EXE,ExitWindows',shutdownF.shutdown,'USER.EXE,ExitWindows'/*'USER.EXE,#7'||'USER.EXE, #7'||'USER.EXE,#7 0'*/,shutdownF.restart,'USER.EXE,ExitWindowsExec'/*'USER.EXE,#246'*/]);
979  if(mode in f)try{WshShell.Run("rundll.exe "+f[mode]);return;}catch(e){}
980 
981  // way 5: rundll32.exe
982  sF([shutdownF.poweroff,'KRNL386.EXE,exitkernel',shutdownF.shutdown,'USER.EXE,ExitWindows',shutdownF.suspend,'PowrProf.dll,SetSuspendState']);
983  if(mode in f)try{WshShell.Run("rundll32.exe "+f[mode]);return;}catch(e){}
984  // way 6: RUNDLL32 USER32.DLL
985  sF([shutdownF.lock,'LockWorkStation',shutdownF.logoff,'ExitWindowsEx']);
986  if(mode in f)try{WshShell.Run("rundll32.exe user32.dll,"+f[mode]);return;}catch(e){}
987 
988  // way 7: RUNONCE.EXE	runonce.exe是微軟Run Once的包裝。它用於第三方應用程序的安裝程序。它允許安裝程序添加到啟動項中,用於再次啟動後,進行進一步配置。
989  if(mode==shutdownF.reboot)try{WshShell.Run("RUNONCE.EXE -q");return;}catch(e){}
990 
991  return 1;
992 }
993 
994 
995 //	↑WMI set	==================
996 
997 
998 
999 
1000 
1001 
1002 
1003 return (
1004 	CeL.application.OS.Windows.WMI
1005 );
1006 }
1007 
1008 
1009 );
1010 
1011