Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer) Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long) Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean Private Declare Function NvCplGetThermalSettings Lib "NvCpl.dll" (ByVal nWindowsMonitorNumber As Long, ByRef pdwCoreTemp As Long, ByRef pdwAmbientTemp As Long, ByRef pdwUpperLimit As Long) As Boolean 'NvCpl.dll 'BOOL CDECL NvCplGetThermalSettings(IN UINT nWindowsMonitorNumber,OUT DWORD* pdwCoreTemp,OUT DWORD* pdwAmbientTemp,OUT DWORD* pdwUpperLimit); Const indexPort = &H295 Const dataPort = &H296 Const Bank0 = &H0 Const Bank1 = &H2 Const Bank2 = &H4 Private Type temperature Max As Long Min As Long End Type Dim CPU As temperature Dim MB As temperature Dim GPU As temperature Private Sub Form_Load() Me.Show DoEvents CPU.Min = 100 GPU.Min = 100 MB.Min = 100 Timer1.Interval = 100 Timer1.Enabled = True End Sub Sub switchbank(bank As Integer) Select Case bank Case 0 SendPort &H4E, Bank0 Exit Sub Case 1 SendPort &H4E, Bank1 Exit Sub Case 2 SendPort &H4E, Bank2 Exit Sub End Select End Sub Function ListenPort(index As Byte) As Byte PortOut indexPort, index ListenPort = PortIn(dataPort) End Function Sub SendPort(index As Byte, Data As Byte) PortOut indexPort, index PortOut dataPort, Data End Sub Function getTemp(TempNum As Integer) As Byte Select Case TempNum Case 1 getTemp = ListenPort(&H27) Exit Function Case 2 getTemp = ListenPort(&H50) Exit Function Case 3 getTemp = ListenPort(&H50) Exit Function End Select End Function Private Sub Timer1_Timer() On Error Resume Next switchbank 0 temp = getTemp(1) If MB.Min > temp Then MB.Min = temp If MB.Max < temp Then MB.Max = temp Label1.Caption = "MB Temp: " & temp & " Min: " & MB.Min & " Max: " & MB.Max switchbank 1 temp = getTemp(2) If CPU.Min > temp Then CPU.Min = temp If CPU.Max < temp Then CPU.Max = temp Label2.Caption = "CPU Temp: " & temp & " Min: " & CPU.Min & " Max: " & CPU.Max switchbank 2 temp = getTemp(3) Label3.Caption = "AUX Temp: " & temp Dim A As Long Dim B As Long Dim C As Long Dim D As Boolean Call NvCplGetThermalSettings(0, A, B, C) If GPU.Min > A Then GPU.Min = A If GPU.Max < A Then GPU.Max = A Label4.Caption = "GPU Temp: " & A & " Min: " & GPU.Min & " Max: " & GPU.Max End Sub