日期:2014-05-17  浏览次数:21359 次

C#怎么获取硬件的温度?还有主板芯片组的信息.

     如题,    别告诉我用WMI,   WMI我已经全部看过了,   除了能获取CPU的温度(不准确)

    其他的都获取不到.   这个例子已经实现了WMI的所有信息 http://download.csdn.net/source/1561647


   而且WMI也获取不到主板芯片组的信息,  比如说BIOS-ID  南北桥芯片组的厂商,牌子等...这些用WMI都获取不到.



   所以求高人 ,要分好说, 给出满意答案, 要多少分给多少分..

------解决方案--------------------
我的第一反应是通过注册表来拿。

主板BIOS:[HKEY_LOCAL_MACHINE\HARDWARE\Description\System]
中央处理器CPU:[HKEY_LOCAL_MACHINE\HARDWARE\Description\System\CentralProcessor\0]

其余你要什么信息就自己从注册表找吧
------解决方案--------------------
这里是一个范例,或许对你有所帮助(附源码)http://dl3.9hao.com/20060619/_2/winsys/othersys/WMI%B5%C4%D2%BB%B8%F6%CA%B5%CF%D6.htm 
以下是相关资料 
http://baike.baidu.com/view/442461.htm 
http://www.newasp.net/tech/net/8540.html 
http://www.ahaoz.com/Article/203/205/545/2005/20051120102957.html  

解析RTCS.VBS主要代码 
该脚本可以直接访问目标的WMI,不依赖于目标的ipc$,实现远程开启/关闭目标telnet服务,为了方便大家学习我抽出了最主要的代码,具体分析如下: 
set objlocator=createobject("wbemscripting.swbemlocator") 
//创建WbemScripting.SwbemLocator对象(脚本接口)。 
//可以看出WMI其实就是把Com组件WbemScripting.SWbemLocator封装起来罢了。 
set objswbemservices=objlocator.connectserver(ipaddress,"root/default",username,password) 
//通过ConnectServer函数请求连接到WMI控件服务上,root/default为命名空间。 
set objinstance=objswbemservices.get("stdregprov") 
//建立访问注册表的实例。 
set objmethod=objinstance.methods_("SetDWORDvalue") 
//建立可以更改注册表键值的方法。 
set objinparam=objmethod.inparameters.spawninstance_() 
//MethodData.InParameters用于获取或设置方法的输入参数。这里用spawninstance方法为它建立一个子实例,下面就可以将参数值赋予这个对象的属性。 
objinparam.hdefkey=&h80000002 
//hdefkey表示根键,根键的十六制值如下: 
//HKEY_CLASSES_ROOT (&H80000000) 
//HKEY_CURRENT_USER (&H80000001) 
//HKEY_LOCAL_MACHINE (&H80000002) 
//HKEY_USERS (&H80000003) 
//HKEY_CURRENT_CONFIG (&H80000005) 
objinparam.ssubkeyname="SOFTWARE\Microsoft\TelnetServer\1.0" 
//ssubkeyname表示子键。 
objinparam.svaluename="NTLM" 
//svaluename表示属性名。 
objinparam.uvalue=ntlm 
//uvalue表示键值。 
set objoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam) 
//利用execmethod执行方法,这里才真正改写了注册表。 

//下面是修改telnet服务的TelnetPort值,原理同上。 
objinparam.svaluename="TelnetPort" 
objinparam.uvalue=port 
set objoutparam=objinstance.execmethod_("SetDWORDvalue",objinparam) 

修改telnet的注册表部分就完成了,将NTLM和TelnetPort进行了修改,要是对方的telnet服务没有开启呢?下面就需要根据telnet的具体情况,来启动telnet服务,继续看代码。 

//首先查询远程主机上tlntsvr的启动方式。 
set objswbemservices=objlocator.connectserver(ipaddress,"root\cimv2",username,password) 
//win32_service类在root\cimv2命名空间中,作用没忘记吧?快看基础知识呵。 
set colinstances=objswbemservices.execquery("select * from win32_service where name='tlntsvr'") 
//注意:查询都是通过枚举来实现的。 
for each objinstance in colinstances 
if objinstance.startmode="Disabled" then 
set objmethod=objinstance.methods_("changestartmode") 
//创建changestartmode方法来改变tlntsvr的启动方式。 
set objinparam=objmethod.inparameters.spawninstance_() 
objinparam.startmode="Manual" 
//将启动方式改为手动方式。 
set objoutparam=objinstance.execmethod_("changestartmode",objinparam)