已经请教几天了,请高手指点,下面我有个例子,说是可以,可是出错,如果不会做的,会改错的也可以啊,呵呵
CODE
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementObjectSearcher vManagementObjectSearcher = new ManagementObjectSearcher(@"ROOT\WMI", @"select * from MSAcpi_ThermalZoneTemperature");
            foreach (ManagementObject managementObject in vManagementObjectSearcher.Get())
            {
                Console.WriteLine(managementObject.Properties["CurrentTemperature"].Value.ToString());
            }        }
    }
}
这是C#的代码,错在foreach (ManagementObject managementObject in vManagementObjectSearcher.Get())这句话上,说“不受支持”Imports System
Imports System.Management
Public Class Form1
    Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click        Dim CPUtprt As Integer = CPU_Temperature()
        If CPUtprt >= 100 Then
            MessageBox.Show("CPU 溫度: " & CPUtprt.ToString & " °C" & ControlChars.CrLf & "溫度破錶嚕! 快準備煎蛋囉! " & ControlChars.CrLf & "或開啟自動灑水系統降溫喔!")
        Else
            MessageBox.Show("CPU 溫度: " & CPU_Temperature() & " °C")
        End If
    End Sub    ' 取得CPU 溫度    Private Function CPU_Temperature() As Integer        Dim Q As String = "Select * From MSAcpi_ThermalZoneTemperature"        Dim mos As New ManagementObjectSearcher("root\WMI", Q)        For Each mo As ManagementObject In mos.Get            Return Convert.ToInt32(mo.GetPropertyValue("CurrentTemperature") - 2732) / 10
        Next
    End Function
End Class以上是VB.NET代码,错在Return Convert.ToInt32(mo.GetPropertyValue("CurrentTemperature") - 2732) / 10
这句话上,依然是不受支持
我用的是vs2005,安装正常
所以我现在怀疑是不是什么插件没装好还是要安装其它的,谢谢回复

解决方案 »

  1.   

    本机用VS2005 运行LZ的C#程序正常,可以取到CPU温度~
    另外使用WMI得是管理员身份运行。
    WMI提供函数得硬件支持,可能LZ的机器硬件或系统不支持
    64位Vista不支持WMI的一些命令
      

  2.   

    真的吗????
    你不是骗我的吧,我试过N次怎么都不行,运行结果能给出来看下吗,还有我用的是双核的CPU
    windows xp sp2的系统,看到你的回复真是太高兴了,我也是用管理员的身份运行的,单硬盘,四条内存,一个显卡,就这些了,会不支持吗?
    还是请你发个结果来看看吧,谢谢
      

  3.   

    我也用过WMI取硬件信息的。运行结果如下:
     Console.WriteLine(managementObject.Properties["CurrentTemperature"].Value.ToString());//3132
     Console.WriteLine((Convert.ToInt32(managementObject.Properties["CurrentTemperature"].Value) - 2732) / 10);//40
      

  4.   

    2008里没这managementObject类了吗
      

  5.   

    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
      

  6.   

    有一台手提电脑上可以用,但是每次运行都一样的结果,难道CPU温度不会变化吗????谁能解开我心头之雾
      

  7.   

    参考:
    http://bbs.itzhe.cn/thread-58868-1-1.html
    http://it.inhe.net/richbbs/2006/333/3338143.htm
      

  8.   

    我也遇到同样的问题:
    在下面的代码foreach (ManagementObject mo in collection)中,在“in”的地方错误,错误信息“不受支持”!!! 
    我用wbemtest.exe查看时:连接“root\WMI”查询"Select CurrentTemperature From MSAcpi_ThermalZoneTemperature"必须要把“检索原型类型”选中,否则不能用。http://topic.csdn.net/u/20090927/17/2b1175f2-dcf6-4efb-baf6-e9e9fab0568a.html?80043