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();
for (;!e.atend();e.movenext ())
{
var p = e.item ();
document.write();
document.write( + p.caption + );
document.write( + p.deviceid + );
document.write( + p.name + );
document.write( + p.cpustatus + );
document.write( + p.availability + );
document.write( + p.level + );
document.write( + p.processorid + );
document.write( + p.systemname + );
document.write( + p.processortype + );
document.write(
);
}
document.write(
);
}
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();
for (;!e.atend();e.movenext ())
{
var p = e.item ();
document.write();
document.write( + p.caption + );
document.write( + p.description + );
document.write( + p.drive + );
document.write( + p.status + );
document.write( + p.medialoaded + );
document.write(
);
}
document.write(
);
}
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();
for (;!e.atend();e.movenext ())
{
var p = e.item ();
document.write();
document.write( + p.description + );
document.write( + p.name + );
document.write( + p.status + );
document.write(
);
}
document.write(
);
}
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();
for (;!e.atend();e.movenext ())
{
var p = e.item ();
document.write();
document.write( + p.hostingboard + );
document.write( + p.manufacturer + );
document.write( + p.poweredon + );
document.write( + p.product + );
document.write( + p.serialnumber + );
document.write( + p.version + );
document.write(
);
}
document.write(
);
}
另外,通过以下方式也可以获得系统的相关信息:
wmi scripting html
其实最关键的还是用到两个activex:
不过这两个activex都是系统自带,不用去下载或注册。
接下来的工作就是用脚本和activex交互
test
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;
};