JavaScript获取客户端计算机硬件及系统等信息的方法


Posted in Javascript onJanuary 02, 2014

JavaScript 获取客户端计算机硬件及系统信息
通过WMI来实现获取客户端计算机硬件及系统信息:

function getSysInfo(){ 
var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
//CPU信息 
var cpu = new Enumerator (service.ExecQuery("SELECT * FROM Win32_Processor")).item(); 
var cpuType=cpu.Name,hostName=cpu.SystemName; 
//内存信息 
var memory = new Enumerator (service.ExecQuery("SELECT * FROM Win32_PhysicalMemory")); 
for (var mem=[],i=0;!memory.atEnd();memory.moveNext()) mem[i++]={cap:memory.item().Capacity/1024/1024,speed:memory.item().Speed} 
//系统信息 
var system=new Enumerator (service.ExecQuery("SELECT * FROM Win32_ComputerSystem")).item(); 
var physicMenCap=Math.ceil(system.TotalPhysicalMemory/1024/1024),curUser=system.UserName,cpuCount=system.NumberOfProcessors return {cpuType:cpuType,cpuCount:cpuCount,hostName:hostName,curUser:curUser,memCap:physicMenCap,mem:mem} 
}

代码实现主要包括这几部分:

先通过new ActiveXObject ("WbemScripting.SWbemLocator"); 访问到WbemScripting对象。
通过locator.ConnectServer(".");连接我们本地电脑(.代表本地电脑,当然
也可以访问其他计算机)。
通过service.ExecQuery("SELECT * FROM Win32_Processor")这个类似sql的语句(其实系统信息也是存储在计算中一个类似数据库的文件中)获取我们需要的对象的记录集。
通过new Enumerator来创建一个可枚举的对象,下面就可以遍历取信息了。

注意:运行的前提是要修改浏览器安全设置,“允许对未标记为可安全执行的ActiveX
脚本的运行”。
这里主要取了CPU、内存及系统用户几个信息,大家利用WMI的API或者借助JSEDIT获取
到更多的信息。下面列出了常用信息的类:

Win32_Processor // CPU 处理器

Win32_PhysicalMemory // 物理内存

Win32_Keyboard // 键盘

Win32_PointingDevice // 点输入设备,如鼠标

Win32_DiskDrive // 硬盘驱动器

Win32_CDROMDrive // 光盘驱动器

Win32_BaseBoard // 主板

Win32_BIOS // BIOS 芯片

Win32_ParallelPort // 并口

Win32_SerialPort // 串口

Win32_SoundDevice // 多媒体设置

Win32_USBController // USB 控制器

Win32_NetworkAdapter // 网络适配器

Win32_NetworkAdapterConfiguration // 网络适配器设置

Win32_Printer // 打印机

Win32_PrinterConfiguration // 打印机设置

Win32_PrintJob // 打印机任务

Win32_TCPIPPrinterPort // 打印机端口

Win32_POTSModem // MODEM

Win32_POTSModemToSerialPort // MODEM 端口

Win32_DesktopMonitor // 显示器

Win32_VideoController // 显卡细节。

Win32_VideoSettings // 显卡支持的显示模式。

Win32_TimeZone // 时区

Win32_SystemDriver // 驱动程序

Win32_DiskPartition // 磁盘分区

Win32_LogicalDisk // 逻辑磁盘

Win32_LogicalMemoryConfiguration // 逻辑内存配置

Win32_PageFile // 系统页文件信息

Win32_PageFileSetting // 页文件设置

Win32_BootConfiguration // 系统启动配置

Win32_OperatingSystem // 操作系统信息

Win32_StartupCommand // 系统自动启动程序

Win32_Service // 系统安装的服务

Win32_Group // 系统管理组

Win32_GroupUser // 系统组帐号

Win32_UserAccount // 用户帐号

Win32_Process // 系统进程

Win32_Thread // 系统线程

Win32_Share // 共享

Win32_NetworkClient // 已安装的网络客户端

Win32_NetworkProtocol // 已安装的网络协议

WMI Win32类的完整信息及详细列表请参考MSDN:
http://msdn2.microsoft.com/en-us/library/aa394084(VS.85).aspx
示例:

function button1_onclick() {//cpu 信息 
var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
var properties = service.ExecQuery("SELECT * FROM Win32_Processor"); 
var e = new Enumerator (properties); 
document.write("<table border=1>"); 
for (;!e.atEnd();e.moveNext ()) 
{ 
var p = e.item (); 
document.write("<tr>"); 
document.write("<td>" + p.Caption + "</td>"); 
document.write("<td>" + p.DeviceID + "</td>"); 
document.write("<td>" + p.Name + "</td>"); 
document.write("<td>" + p.CpuStatus + "</td>"); 
document.write("<td>" + p.Availability + "</td>"); 
document.write("<td>" + p.Level + "</td>"); 
document.write("<td>" + p.ProcessorID + "</td>"); 
document.write("<td>" + p.SystemName + "</td>"); 
document.write("<td>" + p.ProcessorType + "</td>"); 
document.write("</tr>"); 
} 
document.write("</table>"); 
} function Button2_onclick() {//CD-ROM 信息 
var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
var properties = service.ExecQuery("SELECT * FROM Win32_CDROMDrive"); 
var e = new Enumerator (properties); 
document.write("<table border=1>"); 
for (;!e.atEnd();e.moveNext ()) 
{ 
var p = e.item (); 
document.write("<tr>"); 
document.write("<td>" + p.Caption + "</td>"); 
document.write("<td>" + p.Description + "</td>"); 
document.write("<td>" + p.Drive + "</td>"); 
document.write("<td>" + p.Status + "</td>"); 
document.write("<td>" + p.MediaLoaded + "</td>"); 
document.write("</tr>"); 
} 
document.write("</table>"); 
} 
function Button3_onclick() {//键盘信息 
var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
var properties = service.ExecQuery("SELECT * FROM Win32_Keyboard"); 
var e = new Enumerator (properties); 
document.write("<table border=1>"); 
for (;!e.atEnd();e.moveNext ()) 
{ 
var p = e.item (); 
document.write("<tr>"); 
document.write("<td>" + p.Description + "</td>"); 
document.write("<td>" + p.Name + "</td>"); 
document.write("<td>" + p.Status + "</td>"); 
document.write("</tr>"); 
} 
document.write("</table>"); 
} 
function Button4_onclick() {//主板信息 
var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
var properties = service.ExecQuery("SELECT * FROM Win32_BaseBoard"); 
var e = new Enumerator (properties); 
document.write("<table border=1>"); 
for (;!e.atEnd();e.moveNext ()) 
{ 
var p = e.item (); 
document.write("<tr>"); 
document.write("<td>" + p.HostingBoard + "</td>"); 
document.write("<td>" + p.Manufacturer + "</td>"); 
document.write("<td>" + p.PoweredOn + "</td>"); 
document.write("<td>" + p.Product + "</td>"); 
document.write("<td>" + p.SerialNumber + "</td>"); 
document.write("<td>" + p.Version + "</td>"); 
document.write("</tr>"); 
} 
document.write("</table>"); 
}

另外,通过以下方式也可以获得系统的相关信息:
<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> 
<META http-equiv=Content-Type content="text/html; charset=gb2312"> 
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo> 
document.forms[0].txtMACAddr.value=unescape(MACAddr); 
document.forms[0].txtIPAddr.value=unescape(IPAddr); 
document.forms[0].txtDNSName.value=unescape(sDNSName); 
//document.formbar.submit(); 
</SCRIPT> <SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo> 
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true) 
{ 
if(objObject.MACAddress != null && objObject.MACAddress != "undefined") 
MACAddr = objObject.MACAddress; 
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined") 
IPAddr = objObject.IPAddress(0); 
if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined") 
sDNSName = objObject.DNSHostName; 
} 
</SCRIPT> 
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD> 
<BODY> 
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT> 
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT> 
<SCRIPT language=JScript> 
var service = locator.ConnectServer(); 
var MACAddr ; 
var IPAddr ; 
var DomainAddr; 
var sDNSName; 
service.Security_.ImpersonationLevel=3; 
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration'); 
</SCRIPT> 
<FORM id="formfoo" name="formbar" action="index.do" method="post"><INPUT value="00-11-11-B4-52-EF" name="txtMACAddr"> <INPUT value="210.42.38.50" name="txtIPAddr"> <INPUT value="zhupan" name="txtDNSName"> </FORM></BODY></HTML>

其实最关键的还是用到两个ActiveX: 
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT> 
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT> 
不过这两个ActiveX都是系统自带,不用去下载或注册。 
接下来的工作就是用脚本和ActiveX交互 <HTML> 
<head> 
<script language="javascript" type="text/javascript"> 
function getCode(){ 
var locator = new ActiveXObject("WbemScripting.SWbemLocator"); 
var service = locator.ConnectServer("."); 
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE"); 
var e = new Enumerator(properties); 
document.write("<table border=1>"); 
for (; !e.atEnd(); e.moveNext()) { 
var p = e.item(); 
//if(p.IPAddress(0)!=null && p.IPAddress(0)!="undefined" && p.IPAddress(0)!="0.0.0.0" && p.IPAddress(0)!="127.0.0.1"){ 
document.write("<tr>"); 
document.write("<td>" + p.ServiceName + "</td>"); 
document.write("<td>" + p.MACAddress + "</td>"); 
document.write("<td>" + p.IPAddress(0) + "</td>"); 
document.write("</tr>"); 
//break; 
//} 
} 
document.write("</table>"); 
} 
</script> 
</head> 
<BODY> 
<button id="TEST" value="test" onclick="getCode()">TEST</button> 
</BODY> 
</HTML> 
class Win32_NetworkAdapterConfiguration : CIM_Setting 
{ 
boolean ArpAlwaysSourceRoute; 
boolean ArpUseEtherSNAP; 
string Caption; 
string DatabasePath; 
boolean DeadGWDetectEnabled; 
string DefaultIPGateway[]; 
uint8 DefaultTOS; 
uint8 DefaultTTL; 
string Description; 
boolean DHCPEnabled; 
datetime DHCPLeaseExpires; 
datetime DHCPLeaseObtained; 
string DHCPServer; 
string DNSDomain; 
string DNSDomainSuffixSearchOrder[]; 
boolean DNSEnabledForWINSResolution; 
string DNSHostName; 
string DNSServerSearchOrder[]; 
boolean DomainDNSRegistrationEnabled; 
uint32 ForwardBufferMemory; 
boolean FullDNSRegistrationEnabled; 
uint16 GatewayCostMetric[]; 
uint8 IGMPLevel; 
uint32 Index; 
uint32 InterfaceIndex; 
string IPAddress[]; 
uint32 IPConnectionMetric; 
boolean IPEnabled; 
boolean IPFilterSecurityEnabled; 
boolean IPPortSecurityEnabled; 
string IPSecPermitIPProtocols[]; 
string IPSecPermitTCPPorts[]; 
string IPSecPermitUDPPorts[]; 
string IPSubnet[]; 
boolean IPUseZeroBroadcast; 
string IPXAddress; 
boolean IPXEnabled; 
uint32 IPXFrameType[]; 
uint32 IPXMediaType; 
string IPXNetworkNumber[]; 
string IPXVirtualNetNumber; 
uint32 KeepAliveInterval; 
uint32 KeepAliveTime; 
string MACAddress; 
uint32 MTU; 
uint32 NumForwardPackets; 
boolean PMTUBHDetectEnabled; 
boolean PMTUDiscoveryEnabled; 
string ServiceName; 
string SettingID; 
uint32 TcpipNetbiosOptions; 
uint32 TcpMaxConnectRetransmissions; 
uint32 TcpMaxDataRetransmissions; 
uint32 TcpNumConnections; 
boolean TcpUseRFC1122UrgentPointer; 
uint16 TcpWindowSize; 
boolean WINSEnableLMHostsLookup; 
string WINSHostLookupFile; 
string WINSPrimaryServer; 
string WINSScopeID; 
string WINSSecondaryServer; 
};
Javascript 相关文章推荐
Javascript 面向对象特性
Dec 28 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
jQuery之$(document).ready()使用介绍
Apr 05 Javascript
jquery获取iframe中的dom对象(两种方法)
Jul 02 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
jquery常用的12个小功能
Jul 22 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
Sep 03 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
JavaScript实现显示和隐藏图片
Apr 29 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 #Javascript
javascript中处理时间戳为日期格式的方法
Jan 02 #Javascript
JS脚本defer的作用示例介绍
Jan 02 #Javascript
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 #Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 #Javascript
ParseInt函数参数设置介绍
Jan 02 #Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 #Javascript
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
10条PHP高级技巧[修正版]
2011/08/02 PHP
php页面缓存方法小结
2015/01/10 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PDO::setAttribute讲解
2019/01/29 PHP
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
卫生系统先进事迹
2014/05/13 职场文书
企业法人授权委托书
2014/09/25 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
Redis入门教程详解
2021/08/30 Redis
MySQL创建管理HASH分区
2022/04/13 MySQL