Js功能强大灵活,不仅可以用来做网页客户端,还可以写asp后台代码,在Windows中与WSH的环境中更是强大。
以下代码只是我自编自用的Js类framework的一部分,经常被我用来做自动化测试,网站前后台。
使用WMI和注册表获取本机信息,有时候在存日志的时候需要记录一些东西。比如IP,MAC,计算机型号等。
/* javascript prototype.
* Authors: perry < ppsoft268@gmail.com >
* Date : October 19, 2010
*/
MY.ClassFactory.extend(MY.Local.Info,
{
wmiObj: null,
crcTab: null,
//public
newGuid: function()
{
var sclt = MY.ClassFactory.newOle('{06290BD5-48AA-11D2-8432-006008C3FBFC}');
if ( sclt )
return sclt.Guid.substr(0,38);
if ( MY.ClassFactory.isDefined(MY_NS_SYSTEM_INFO) )
return MY.System.Info.GetNewUuid();
var hash = this.getMd5(
this.getComputerModel() +
this.getSystemVersion() +
this.getComputerName() +
this.getUserName() +
this.getLocalMac() +
this.getLocalIP() +
(Date.getNow() * Math.random()).toString());
return '{%4X%4X-%4X-%4X-%4X-%4X%4X%4X}'.format(
((Date.getNow() >> 0) ^ parseInt(hash.substr(0x00,4))) & 0xffff,
((Date.getNow() << 1) ^ parseInt(hash.substr(0x04,4))) & 0xffff,
((Date.getNow() >> 2) ^ parseInt(hash.substr(0x08,4))) & 0xffff,
((Date.getNow() << 3) ^ parseInt(hash.substr(0x0C,4))) & 0xffff,
((Date.getNow() >> 3) ^ parseInt(hash.substr(0x10,4))) & 0xffff,
((Date.getNow() << 2) ^ parseInt(hash.substr(0x14,4))) & 0xffff,
((Date.getNow() >> 1) ^ parseInt(hash.substr(0x18,4))) & 0xffff,
((Date.getNow() << 0) ^ parseInt(hash.substr(0x1C,4))) & 0xffff);
},
//public
getSystemLanguageId: function()
{
var oSet = null;
if ( this.initWmi() )
{
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_OperatingSystem'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
return oSet.item().OSLanguage;
}
catch (e) { }
}
if ( MY.ClassFactory.isDefined(MY_NS_SYSTEM_INFO) )
return MY.System.Info.SystemLanguageId;
try { return parseInt(MY.Shell.RegRead('HKCU\\Control Panel\\International\\Locale'), 0x10);}
catch (e) {}
return -1;
},
//public
getComputerName: function()
{
var oSet = null;
if ( this.initWmi() )
{
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_ComputerSystem'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
return oSet.item().Caption;
}
catch (e) { }
}
if ( MY.ClassFactory.isDefined(MY_NS_SYSTEM_INFO) )
return MY.System.Info.ComputerName;
return MY.Network.ComputerName;
},
//public
getUserName: function()
{
var oSet = null;
if ( this.initWmi() )
{
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_ComputerSystem'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
return oSet.item().UserName;
}
catch (e) { }
}
if ( MY.ClassFactory.isDefined(MY_NS_SYSTEM_INFO) )
return MY.System.Info.UserName;
return MY.Network.UserName;
},
//public
getSystemVersion: function()
{
var oSet = null;
if ( this.initWmi() )
{
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_OperatingSystem'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
return '%s %s'.format(oSet.item().Caption, oSet.item().CSDVersion);
}
catch (e) { }
}
if ( MY.ClassFactory.isDefined(MY_NS_SYSTEM_INFO) )
return MY.System.Info.SystemVersion;
try { return '%s Build %s'.format(
MY.Shell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProductName'),
MY.Shell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentBuildNumber'));}
catch (e) {}
return 'Unknown';
},
//public
getLocalMac: function()
{
var oSet = null,
oNic = [],
mac = 'Unknown';
if ( !this.initWmi() )
return mac;
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_NetworkAdapterConfiguration'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
if ( oSet.item().IPEnabled )
oNic.push({MAC:oSet.item().MACAddress,IP:oSet.item().IPAddress[0],NAME:oSet.item().Caption});
for ( var i = 0; i < oNic.length; i++ )
if ( / +Ethernet +/gi.test(oNic[i].NAME) )
return oNic[i].MAC;
for ( var i = 0; i < oNic.length; i++ )
if ( / +LAN +/gi.test(oNic[i].NAME) )
return oNic[i].MAC;
if ( oNic.length )
mac = oNic[0].MAC;
}
catch (e) { }
return mac;
},
//public
getLocalIP: function()
{
var oSet = null,
oNic = [],
ip = 'Unknown';
if ( !this.initWmi() )
return ip;
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_NetworkAdapterConfiguration'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
if ( oSet.item().IPEnabled )
oNic.push({MAC:oSet.item().MACAddress,IP:oSet.item().IPAddress(0),NAME:oSet.item().Caption});
for ( var i = 0; i < oNic.length; i++ )
if ( / +Ethernet +/gi.test(oNic[i].NAME) )
return oNic[i].IP;
for ( var i = 0; i < oNic.length; i++ )
if ( / +LAN +/gi.test(oNic[i].NAME) )
return oNic[i].IP;
if ( oNic.length )
ip = oNic[0].IP;
}
catch (e) { }
return ip;
},
//public
getSerialPortNames: function()
{
var oSet = null,
oCOMs = [];
if ( !this.initWmi() )
return null;
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_SerialPortConfiguration'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
oCOMs.push(oSet.item().Name);
return oCOMs;
}
catch (e) { }
return null;
},
//public
getParallelPortCount: function()
{
var oSet = null,
nCount = 0;
if ( !this.initWmi() )
return -1;
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_ParallelPort'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
nCount++;
return nCount;
}
catch (e) { }
return 0;
},
//public
getComputerModel: function()
{
var oSet = null;
if ( this.initWmi() )
{
try
{
oSet = new Enumerator(this.wmiObj.InstancesOf('Win32_ComputerSystem'));
for ( ; !oSet.atEnd(); oSet.moveNext() )
return '%s %s'.format(oSet.item().Manufacturer, oSet.item().Model);
}
catch (e) { }
}
return 'Unknown';
},
//private
initWmi: function()
{
if ( this.wmiObj )
return true;
try {
this.wmiObj = GetObject('winmgmts:');}
catch (e) {}
return this.wmiObj != null;
}
}, true);