日期:2014-05-18  浏览次数:21128 次

如何用.NET来获取CPU、显卡和硬盘的温度?
怎样用.NET来获取这些信息?C#和VB.NET的都行
还有,别告诉我用这个代码:
C# code

Double CPUtprt = 0;  

 System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature");  

 foreach (System.Management.ManagementObject mo in mos.Get())  

 {  

     CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;  

     textBox1.Text = ("CPU 溫度 : " + CPUtprt.ToString() + " °C");  

 }  


这个代码运行会出错,跳出ManageMentException,然后说不受支持!
请告诉我一个可用的代码,最好是一个类库,而不是窗体应用程序

------解决方案--------------------
http://topic.csdn.net/u/20100810/16/822f59ed-bc4d-4983-81da-e151c337f0a5.html

http://topic.csdn.net/u/20090907/16/3f7ea3a7-ac50-455b-a5a4-50b567b7bf77.html
------解决方案--------------------
http://topic.csdn.net/u/20090505/16/8b03a228-4099-4f53-8b99-17bbf5e5a477.html
------解决方案--------------------
本机用VS2005 运行LZ的C#程序正常,可以取到CPU温度~
------解决方案--------------------
可以用系统API,通过DllImport的方式。
------解决方案--------------------
Z直接调用API
------解决方案--------------------
不知道为什么LZ会说WMI读取不出来呢?
WMI就是封装的API的啊完全可以使用的啊
------解决方案--------------------
LZ的代码我在VS2010可以正常执行的啊

不知道是否引用System.Management?
------解决方案--------------------
我想楼主真没引用System.Management。。。
------解决方案--------------------
VB.NET code
Public Function GetCPUTemp() As Double
          Dim i    As Integer
          Dim mCPU    As Variant
          Dim u    As Variant
          Dim s    As String
           
          Set mCPU = GetObject("WINMGMTS:{impersonationLevel=impersonate}!rootwmi").ExecQuery("Select  CurrentTemperature  From  MSAcpi_ThermalZoneTemperature")
          For Each u In mCPU
                  s = s & u.CurrentTemperature
          Next
           
          Set mCPU = Nothing
           
          GetCPUTemp = (s - 2732) / 10
            DoEvents
  End Function

------解决方案--------------------
在DotFramewoek 中已经封装了System.Management,这里提供的功能已经足以获取系统的信息