C#开发程序猿 2023-04-14 11:57 采纳率: 50%
浏览 73
已结题

C#用opneHardwareMonitor获取显卡温度

C#用OpenHardwareMonitor读显卡温度为什么都说可以用,但是一只是卡在computer.Open();这一直找不到系统文件,有什么办法能解决嘛,源码网上找的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinFormsApp1.Homepagme;
using OpenHardwareMonitor.Hardware;
using System.Threading;


namespace WinFormsApp1
{
    public partial class ceshi : Form
    {
        public class UpdateVisitor : IVisitor
        {
            public void VisitComputer(IComputer computer)
            {
                computer.Traverse(this);
            }

            public void VisitHardware(IHardware hardware)
            {
                hardware.Update();
                foreach (IHardware subHardware in hardware.SubHardware)
                    subHardware.Accept(this);
            }

            public void VisitSensor(ISensor sensor) { }

            public void VisitParameter(IParameter parameter) { }
        }

        public class GetCPUTemp
        {

            public static int GetTemp()
            {
                //注意,必须以管理员身份运行方可。hhd只有已用空间一项,mainboard没有传感器。cpu温度
                UpdateVisitor updateVisitor = new UpdateVisitor();
                Computer computer = new Computer();
                computer.Open();
                computer.CPUEnabled = true;
                // computer.MainboardEnabled = true;
                // computer.HDDEnabled = true;
                computer.Accept(updateVisitor);

                int temperature = 0;


                for (int i = 0; i < computer.Hardware.Length; i++)
                {
                    //查找硬件类型为CPU
                    if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                    {
                        for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                        {
                            string str = computer.Hardware[i].Sensors.ToString();
                            int k = 0;


                            if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature && computer.Hardware[i].Sensors[j].Name == "CPU Core # 1")





                            {
                                temperature = Convert.ToInt32(computer.Hardware[i].Sensors[j].Value);
                            }
                        }
                    }
                }
                return temperature;
            }
        }




        private List<Image> images = new List<Image>();
        public ceshi()
        {
            InitializeComponent();



            while (true)
            {
                label2.Text = GetCPUTemp.GetTemp().ToString();
                Thread.Sleep(1000);
                
            }






        }











}


异常文本


System.MissingMethodException: Method not found: 'System.Threading.Mutex System.Threading.Mutex.OpenExisting(System.String, System.Security.AccessControl.MutexRights)'.
   at OpenHardwareMonitor.Hardware.Ring0.Open()
   at OpenHardwareMonitor.Hardware.Computer.Open()
   at WinFormsApp1.ceshi.GetCPUTemp.GetTemp() in D:\桌面\vs\WinFormsApp1\WinFormsApp1\ceshi.cs:line 48
   at WinFormsApp1.ceshi..ctor() in D:\桌面\vs\WinFormsApp1\WinFormsApp1\ceshi.cs:line 105
   at WinFormsApp1.index.button4_Click(Object sender, EventArgs e) in D:\桌面\vs\WinFormsApp1\WinFormsApp1\index.cs:line 159
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
  at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)
  • 写回答

7条回答 默认 最新

  • 张朋举Biz 2023-04-14 15:18
    关注

    你的代码没大毛病,测试了nuget上2个版本的dll,都是可以的;显然2021年的OpenHardwareMonitor.0.9.6更科学;
    另外你的那个判断Name多余。
    版本1:OpenHardwareMonitorLibCore.1.0.2

    img

    版本2、nuget的 OpenHardwareMonitor.0.9.6

    img

    这是测试代码,添加nuget引用就能跑了。

     internal class Program
        {
            public static void Main(string[] args)
            {
                var updateVisitor = new UpdateVisitor();
                var computer = new Computer();
                computer.Open();
                computer.CPUEnabled = true; //这个很关键
                computer.Accept(updateVisitor);
    
                for (int i = 0; i < computer.Hardware.Length; i++)
                {
                    //查找硬件类型为CPU
                    if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                    {
                        for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                        {
                            var iSensor = computer.Hardware[i].Sensors[j];
                            Console.WriteLine($"{iSensor.SensorType},{iSensor.Name},{iSensor.Value}");
                            //找到温度传感器
                            if (iSensor.SensorType == SensorType.Temperature)
                            {
                                var v = iSensor.Value.ToString();
                                Console.WriteLine(v);
                            }
                        }
                    }
                }
            }
        }
    
    
        public class UpdateVisitor : IVisitor
        {
            public void VisitComputer(IComputer computer)
            {
                computer.Traverse(this);
            }
    
            public void VisitHardware(IHardware hardware)
            {
                hardware.Update();
                foreach (var subHardware in hardware.SubHardware)
                    subHardware.Accept(this);
            }
    
            public void VisitSensor(ISensor sensor)
            {
            }
    
            public void VisitParameter(IParameter parameter)
            {
            }
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月14日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用