私のコンピューターでは、CPU温度を取得しようとしています。 StackOverflowで検索すると、次のことがわかりました。
C:\WINDOWS\system32>wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature
しかし、私はこのエラーを受け取ります:
Node - ADMIN
ERROR:
Description = Not supported
あなたはこのコードを使うことができます:
function Get-Temperature {
$t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"
$returntemp = @()
foreach ($temp in $t.CurrentTemperature)
{
$currentTempKelvin = $temp / 10
$currentTempCelsius = $currentTempKelvin - 273.15
$currentTempFahrenheit = (9/5) * $currentTempCelsius + 32
$returntemp += $currentTempCelsius.ToString() + " C : " + $currentTempFahrenheit.ToString() + " F : " + $currentTempKelvin + "K"
}
return $returntemp
}
Get-Temperature
新しいセンサーを使用するか、私が持っているものと仰角を使用します。また、臨界温度とパーセンテージ(摂氏)も表示されます。デバッグを容易にするためにTemperatures.txtファイルと、センサーからのシリアル化されたオブジェクトを含むxmlが残されます。
function Get-Temperature {
$TempFormat = "#"
$TempFile = "temperature"
$Command = 'Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" ' + " > $pwd\$TempFile.txt"
$Command = 'Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" ' + " | Export-Clixml $pwd\$TempFile.xml"
$p = Start-Process -Verb runas -FilePath "powershell" -ArgumentList $command -WorkingDirectory $pwd -PassThru
$p.WaitForExit()
$t = Import-Clixml pippo.xml
$returntemp = @()
foreach ($Sensor in $t)
{
$Active = if($sensor.Active){"On "}else{"Off"}
$temp = $Sensor.CurrentTemperature
$Critical = $Sensor.CriticalTripPoint
$currentTempKelvin = $temp / 10
$currentTempCelsius = $currentTempKelvin - 273.15
$currentTempFahrenheit = (9/5) * $currentTempCelsius + 32
$StrKelvin = $currentTempKelvin.ToString($TempFormat).PadLeft(3, " ")
$StrCelsius = $currentTempCelsius.ToString($TempFormat).PadLeft(3, " ")
$StrFahrenheit = $currentTempFahrenheit.ToString($TempFormat).PadLeft(3, " ")
$CriticalKelvin = $Critical / 10
$CriticalCelsius = $CriticalKelvin - 273.15
$CriticalFahrenheit = (9/5) * $CriticalCelsius + 32
$StrCritKelvin = $CriticalKelvin.ToString($TempFormat).PadRight(3, " ")
$StrCritCelsius = $CriticalCelsius.ToString($TempFormat).PadRight(3, " ")
$StrCritFahrenheit = $CriticalFahrenheit.ToString($TempFormat).PadRight(3, " ")
$PerCrit = ($currentTempCelsius/$CriticalCelsius * 100)
$StrPerCrit = $PerCrit.ToString($TempFormat).PadLeft(3, " ")
$returntemp += "$Active $StrPerCrit% $StrCelsius/$StrCritCelsius C : $StrFahrenheit/$StrCritFahrenheit F : $StrKelvin/$StrCritKelvin K - " + $Sensor.InstanceName
}
return $returntemp
}
Get-Temperature
WMIとOpenhardwaremonitorの両方の方法でCPU温度を取得できます。
Hardwaremonitorを開きます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenHardwareMonitor.Hardware;
namespace Get_CPU_Temp5
{
class Program
{
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) { }
}
static void GetSystemInfo()
{
UpdateVisitor updateVisitor = new UpdateVisitor();
Computer computer = new Computer();
computer.Open();
computer.CPUEnabled = true;
computer.Accept(updateVisitor);
for (int i = 0; i < computer.Hardware.Length; i++)
{
if (computer.Hardware[i].HardwareType == HardwareType.CPU)
{
for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
{
if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
Console.WriteLine(computer.Hardware[i].Sensors[j].Name + ":" + computer.Hardware[i].Sensors[j].Value.ToString() + "\r");
}
}
}
computer.Close();
}
static void Main(string[] args)
{
while (true)
{
GetSystemInfo();
}
}
}
}
WMI:
using System;
using System.Diagnostics;
using System.Management;
class Program
{
static void Main(string[] args)
{
Double CPUtprt = 0;
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature");
foreach (System.Management.ManagementObject mo in mos.Get())
{
CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
Console.WriteLine("CPU temp : " + CPUtprt.ToString() + " °C");
}
}
}
ここで素敵なチュートリアルを見つけました。CPU温度を正常に取得しました。