JavaScript prototype, 获取本机信息.

本文介绍了一个JavaScript类框架的部分代码,该框架可用于自动化测试和网站开发。通过WMI和注册表,它可以获取包括IP地址、MAC地址、计算机型号等在内的本机信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值