做一个CPU温度的程序

junsanrao 2009-05-05 04:25:31
已经请教几天了,请高手指点,下面我有个例子,说是可以,可是出错,如果不会做的,会改错的也可以啊,呵呵
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,安装正常
所以我现在怀疑是不是什么插件没装好还是要安装其它的,谢谢回复
...全文
1451 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
llj821215 2009-09-27
  • 打赏
  • 举报
回复
我也遇到同样的问题:
在下面的代码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
junsanrao 2009-05-06
  • 打赏
  • 举报
回复
为什么会在有些电脑上可以运行,而在我的电脑上和公司的电脑上却无法运行呢,奇怪
wxg22526451 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 junsanrao 的回复:]
有一台手提电脑上可以用,但是每次运行都一样的结果,难道CPU温度不会变化吗????谁能解开我心头之雾
[/Quote]
参考:
http://bbs.itzhe.cn/thread-58868-1-1.html
http://it.inhe.net/richbbs/2006/333/3338143.htm
junsanrao 2009-05-06
  • 打赏
  • 举报
回复
有一台手提电脑上可以用,但是每次运行都一样的结果,难道CPU温度不会变化吗????谁能解开我心头之雾
sushou2009 2009-05-05
  • 打赏
  • 举报
回复
有个显卡的 你可以考虑下
wuyq11 2009-05-05
  • 打赏
  • 举报
回复
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
junsanrao 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wxg22526451 的回复:]
我也用过WMI取硬件信息的。

运行结果如下:

C# code Console.WriteLine(managementObject.Properties["CurrentTemperature"].Value.ToString());//3132
Console.WriteLine((Convert.ToInt32(managementObject.Properties["CurrentTemperature"].Value) - 2732) / 10);//40
[/Quote]

再麻烦你把你运行的所有代码发到这里来给我好吗?谢谢了
xin_xiao 2009-05-05
  • 打赏
  • 举报
回复
悲剧啊,那如果在08里想跑这个程序怎么跑?
junsanrao 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xin_xiao 的回复:]
2008里没这managementObject类了吗
[/Quote]
没有吧,我试过了
xin_xiao 2009-05-05
  • 打赏
  • 举报
回复
2008里没这managementObject类了吗
blestcc 2009-05-05
  • 打赏
  • 举报
回复
記錯,是顯卡的
blestcc 2009-05-05
  • 打赏
  • 举报
回复
前幾天剛有人共享了一個啊
小弟万元户 2009-05-05
  • 打赏
  • 举报
回复
学习
wxg22526451 2009-05-05
  • 打赏
  • 举报
回复
我也用过WMI取硬件信息的。

运行结果如下:
 Console.WriteLine(managementObject.Properties["CurrentTemperature"].Value.ToString());//3132
Console.WriteLine((Convert.ToInt32(managementObject.Properties["CurrentTemperature"].Value) - 2732) / 10);//40
cpio 2009-05-05
  • 打赏
  • 举报
回复
不过这种兼容性不好的代码,取不出来也比较烦人
cpio 2009-05-05
  • 打赏
  • 举报
回复
应该是系统问题,你把程序在其它电脑上运行看看
junsanrao 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxg22526451 的回复:]
本机用VS2005 运行LZ的C#程序正常,可以取到CPU温度~
另外使用WMI得是管理员身份运行。
WMI提供函数得硬件支持,可能LZ的机器硬件或系统不支持
64位Vista不支持WMI的一些命令
[/Quote]
真的吗????
你不是骗我的吧,我试过N次怎么都不行,运行结果能给出来看下吗,还有我用的是双核的CPU
windows xp sp2的系统,看到你的回复真是太高兴了,我也是用管理员的身份运行的,单硬盘,四条内存,一个显卡,就这些了,会不支持吗?
还是请你发个结果来看看吧,谢谢
wxg22526451 2009-05-05
  • 打赏
  • 举报
回复
本机用VS2005 运行LZ的C#程序正常,可以取到CPU温度~
另外使用WMI得是管理员身份运行。
WMI提供函数得硬件支持,可能LZ的机器硬件或系统不支持
64位Vista不支持WMI的一些命令
junsanrao 2009-05-05
  • 打赏
  • 举报
回复
或者有的话可以发到我的邮箱 raojunzhang@126.com,谢谢

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧