Link to home
Start Free TrialLog in
Avatar of yossikally
yossikally

asked on

How can I get CPU temperature in code

Windows Measurements Instrumentation interface contain  a method to get CPU temperature but from what I have read, it is not implemented for most motherboards.

Still, lots of products e.g. Sisoftware,MotherBoard monitor ,PC Wizard 2008 offer this service.  How do they get this data? Is it possible to inquire with the BIOS?  Is it Kernel Mode funcitonality?  

Any input - most welcome
Avatar of slado2
slado2

Check this article about reading cpu temperature using WMI.
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Try
 
            Dim searcher As New ManagementObjectSearcher( _
 
                "root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature")
 
 
 
            For Each queryObj As ManagementObject In searcher.Get()
 
                Dim temp As Double = CDbl(queryObj("CurrentTemperature"))
 
                temp = (temp - 2732) / 10.0
 
                MessageBox.Show(temp.ToString)
 
            Next
 
        Catch err As ManagementException
 
            MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
 
        End Try
 
    End Sub
 
End Class

Open in new window

Avatar of jkr
Usually a vendor-specific driver reads that data and reports it, yet the driver interface might not be documented. One common way would be WMI, but that might not always work. Could you try

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set wbemObjectSet = objWMIService.ExecQuery ("SELECT * FROM MSAcpi_ThermalZoneTemperature")
For Each wbemObject In wbemObjectSet
       wscript.echo "-----------------------------------"
       wscript.echo "MSAcpi_ThermalZoneTemperature instance"
       wscript.echo "-----------------------------------"
       wscript.echo wbemObject.CurrentTemperature
Next

to see whether that works?
Avatar of yossikally

ASKER

jkr, is there a C++ version of the aboe code?
Well, sure, but that would be futile unless the VBS thing works...
ASKER CERTIFIED SOLUTION
Avatar of jkr
jkr
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
This is probably the right solution, the only problem is that I cannot get it to run on my PC/XP, where I keep getting error 0x80041014 after the line
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
 executes
to which there is no clear cut solution
jkr: did you copy this code from another website?