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 相关文章推荐
一些mootools的学习资源
Feb 07 Javascript
表单元素与非表单元素刷新区别详细解析
Nov 06 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
Jquery实现自定义tooltip示例代码
Feb 12 Javascript
JavaScript 学习笔记之数据类型
Jan 14 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
js HTML5上传示例代码完整版
Oct 10 Javascript
javascript中this用法实例详解
Apr 06 Javascript
详解webpack 如何集成第三方js库
Jun 29 Javascript
JS实现自定义弹窗功能
Aug 08 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 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
PHP实现文件安全下载
2006/10/09 PHP
非常不错的MySQL优化的8条经验
2008/03/24 PHP
解析php入库和出库
2013/06/25 PHP
preg_match_all使用心得分享
2014/01/31 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
python冒泡排序算法的实现代码
2013/11/21 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
Timberland俄罗斯官方网上商店:全球领先的户外品牌
2020/03/15 全球购物
诚信考试倡议书
2014/04/15 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
计算机软件专业求职信
2014/06/10 职场文书
开幕式邀请函
2015/01/31 职场文书
学校学期工作总结
2015/08/13 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
4种方法python批量修改替换列表中元素
2022/04/07 Python