Selaa lähdekoodia

增加读取aida64传感器数据

懒得勤快 10 kuukautta sitten
vanhempi
sitoutus
3e9ea65fa7

+ 55 - 0
Masuit.Tools.Abstractions/Hardware/SensorTypes.cs

@@ -0,0 +1,55 @@
+namespace Masuit.Tools.Abstractions.Hardware;
+
+public enum SensorTypes
+{
+    Unknown,
+    CoolingFan,
+    FanDuty,
+    Temperature,
+    Voltage,
+    Current,
+    Power,
+    System,
+}
+
+public static class SensorTypeStrings
+{
+    public const string FanDuty = "Fan Duty";
+    public const string FanSpeed = "Fan Speed";
+    public const string Temperature = "Temperature";
+    public const string Voltage = "Voltage";
+    public const string Current = "Current";
+    public const string Power = "Power";
+    public const string System = "System";
+    public const string Unknown = "Unkown";
+
+    internal static SensorTypes GetTypeFromStringCode(string typeString)
+    {
+        switch (typeString)
+        {
+            case "fan":
+                return SensorTypes.CoolingFan;
+
+            case "temp":
+                return SensorTypes.Temperature;
+
+            case "volt":
+                return SensorTypes.Voltage;
+
+            case "curr":
+                return SensorTypes.Current;
+
+            case "pwr":
+                return SensorTypes.Power;
+
+            case "sys":
+                return SensorTypes.System;
+
+            case "duty":
+                return SensorTypes.FanDuty;
+
+            default:
+                return SensorTypes.Unknown;
+        }
+    }
+}

+ 9 - 0
Masuit.Tools.Abstractions/Hardware/SensorValue.cs

@@ -0,0 +1,9 @@
+namespace Masuit.Tools.Abstractions.Hardware;
+
+public class SensorValue
+{
+    public string Identifier { get; internal set; }
+    public string Name { get; internal set; }
+    public string Value { get; internal set; }
+    public SensorTypes Type { get; internal set; }
+}

+ 54 - 0
Masuit.Tools.Abstractions/Hardware/SystemInfo.cs

@@ -2,12 +2,15 @@
 using Microsoft.Win32;
 using System.Collections.Concurrent;
 using System.Diagnostics;
+using System.IO.MemoryMappedFiles;
 using System.Management;
 using System.Net;
 using System.Net.NetworkInformation;
 using System.Net.Sockets;
 using System.Runtime.InteropServices;
 using System.Text;
+using System.Xml.Linq;
+using Masuit.Tools.Abstractions.Hardware;
 
 namespace Masuit.Tools.Hardware
 {
@@ -965,5 +968,56 @@ namespace Masuit.Tools.Hardware
 #pragma warning restore 1591
 
         #endregion Win32API声明
+
+        #region AIDA64
+
+        /// <summary>
+        /// 获取AIDA64传感器值,需要AIDA64开启共享内存
+        /// </summary>
+        /// <returns></returns>
+        public static IEnumerable<SensorValue> GetAida64Values()
+        {
+            using var mmf = MemoryMappedFile.OpenExisting("AIDA64_SensorValues");
+            using var stream = mmf.CreateViewStream();
+            using BinaryReader binReader = new BinaryReader(stream);
+            var sb = new StringBuilder((int)stream.Length);
+            sb.Append("<root>");
+            var c = binReader.ReadChar();
+            while (c != '\0')
+            {
+                sb.Append(c);
+                c = binReader.ReadChar();
+            }
+            sb.Append("</root>");
+            var sharedMemString = sb.ToString();
+            var document = XDocument.Parse(sharedMemString);
+            foreach (var element in document.Root.Elements())
+            {
+                var v = new SensorValue
+                {
+                    Type = SensorTypeStrings.GetTypeFromStringCode(element.Name.LocalName)
+                };
+
+                foreach (var childElement in element.Elements())
+                {
+                    if (childElement.Name.LocalName == "id")
+                    {
+                        v.Identifier = childElement.Value;
+                    }
+                    else if (childElement.Name.LocalName == "label")
+                    {
+                        v.Name = childElement.Value;
+                    }
+                    else if (childElement.Name.LocalName == "value")
+                    {
+                        v.Value = childElement.Value;
+                    }
+                }
+
+                yield return v;
+            }
+        }
+
+        #endregion AIDA64
     }
 }

+ 22 - 0
Test/Masuit.Tools.Abstractions.Test/Hardware/Aida64Tests.cs

@@ -0,0 +1,22 @@
+using System.Linq;
+using Masuit.Tools.Abstractions.Hardware;
+using Masuit.Tools.Hardware;
+using Xunit;
+
+namespace Masuit.Tools.Abstractions.Test.Hardware
+{
+    public class Aida64Tests
+    {
+        [Fact]
+        public void GetValuesFromSharedMemTest()
+        {
+            var values = SystemInfo.GetAida64Values();
+
+            Assert.True(values.Any());
+            Assert.False(values.Any(e => e.Value == null));
+            Assert.False(values.Any(e => e.Name == null));
+            Assert.False(values.Any(e => e.Identifier == null));
+            Assert.False(values.Any(e => e.Type == SensorTypes.Unknown));
+        }
+    }
+}

+ 1 - 8
Test/Masuit.Tools.Abstractions.Test/Hardware/SystemInfo_UnitTest.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Linq;
 using System.Threading.Tasks;
 using Masuit.Tools.Hardware;
@@ -43,13 +43,6 @@ public class SystemInfo_UnitTest
         Assert.True(res > 0);
     }
 
-    [Fact]
-    public void SystemInfo_GetProcessorData_IfNotWinPlatform()
-    {
-        string res = SystemInfo.GetProcessorData();
-        Assert.True(res == "0.000%");
-    }
-
     [Fact]
     public void SystemInfo_GetCPUTemperature_IfNotWinPlatform()
     {