问题描述
我的程序如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingOpenHardwareMonitor.Hardware;namespaceCPUTemperature{publicclassUpdateVisitor:IVisitor{publicvoidVisitComputer(IComputercomputer){computer.Traverse(this);}publicvoidVisitHardware(IHardwarehardware){hardware.Update();foreach(IHardwaresubHardwareinhardware.SubHardware)subHardware.Accept(this);}publicvoidVisitSensor(ISensorsensor){}publicvoidVisitParameter(IParameterparameter){}}publicclassCHardwareMonitor{publicstaticstringGetCPUTemperature(){StringBuilderstr=newStringBuilder();try{ComputermyComputer=newComputer();UpdateVisitorupdateVisitor=newUpdateVisitor();myComputer.Open();myComputer.Accept(updateVisitor);for(inti=0;i<myComputer.Hardware.Length;i++){//循环找到HardwareType为cpuif(myComputer.Hardware[i].HardwareType==HardwareType.CPU){for(intj=0;j<myComputer.Hardware[i].Sensors.Length;j++){//找到温度if(myComputer.Hardware[i].Sensors[j].SensorType==SensorType.Temperature){//获取到cpu核心str.Append(myComputer.Hardware[i].Sensors[j].Name);str.Append("t");//这里就是cpu温度了str.Append(myComputer.Hardware[i].Sensors[j].Value.ToString());str.Append("n");}}}}}catch{}return(str.ToString());}}}
运行图如下:下面的lib没有配对的pdb是不是问题的关键。另外我的系统是win8.1的64位。我用过wmi的拒绝访问。如果不行也可以给一个API方面的温度数据读取方法。请各位麻烦帮我看一下。
解决方案
解决方案二:
这是openhardwaremonitor软件的温度测试图。目前就是能读出前面的cpu读不出后面的Value。
解决方案三:
坐等指导。
解决方案四:
有人可以告知一下吗?
解决方案五:
DoubleCPUtprt=0;varmos=newSystem.Management.ManagementObjectSearcher(@"rootWMI","Select*FromMSAcpi_ThermalZoneTemperature");foreach(varmoinmos.Get()){CPUtprt=Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString())-2732)/10;textBox1.Text=("CPU温度:"+CPUtprt.ToString()+"°C");}
解决方案六:
这串代码用过,没有办法实时读取温度。是WMI。不过谢谢你了;继续等
解决方案七:
解决方案八:
google的网站上不去。。。汗。
解决方案九:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Management;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){DoubleCPUtprt=0;try{ManagementObjectSearchermos=newManagementObjectSearcher(@"root/WMI","Select*FromMSAcpi_ThermalZoneTemperature");foreach(System.Management.ManagementObjectmoinmos.Get()){CPUtprt=Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString())-2732)/10;}}catch{}Console.WriteLine(CPUtprt.ToString());Console.ReadLine();}}}
这是wmi的代码显示温度为0
解决方案十:
。。。。。。。。。。为什么我可以读取出来呢?我是64位win7
解决方案十一:
你是用的哪个代码?
解决方案十二:
@SomethingJack
解决方案十三:
有人可以告诉我为什么吗?
解决方案十四:
不知楼主解决了么,本人也是如此。但我先运行Openhardwaremonitor程序,再执行代码就可以得到温度了。。。
解决方案十五:
管理员方式运行VS2013,就能得到结果
解决方案:
ComputermyComputer=newComputer(){MainboardEnabled=true,CPUEnabled=true,RAMEnabled=true,GPUEnabled=true,FanControllerEnabled=true,HDDEnabled=true};myComputer.Open();
解决方案:
亲,你的问题解决了吗
解决方案:
不好意思了,那个时候在解体,后面又准备考研了。总结一下这个问题。最主要的原因在于,首先需要运行那个openhardwaremonitor.exe文件也就是下图中的应用程序然后,再运行我们创建的那个C#程序,本项目最终的C#的winform如下。这样就可以看到已经可以显示温度了,并且这个检测是实时检测的,而非上面所说的WMI的方式。再贴一张图证明一下。其次,本人的系统是WIN10的,可能跟这个有点关系。因为同样的程序在队友的win7系统下就可以很无障碍的跑出来。ok,希望以后还需要这个的人们能偶有些帮助,此贴终结。