using NvAPIWrapper.GPU; using NvAPIWrapper.Native; using NvAPIWrapper.Native.Exceptions; using NvAPIWrapper.Native.GPU; using NvAPIWrapper.Native.Interfaces.GPU; namespace GHelper.Gpu; public class NvidiaGpuTemperatureProvider : IGpuTemperatureProvider { private readonly PhysicalGPU? _internalGpu; public NvidiaGpuTemperatureProvider() { _internalGpu = GetInternalDiscreteGpu(); } public bool IsValid => _internalGpu != null; public int? GetCurrentTemperature() { if (!IsValid) return null; PhysicalGPU internalGpu = _internalGpu!; IThermalSensor? gpuSensor = GPUApi.GetThermalSettings(internalGpu.Handle).Sensors .FirstOrDefault(s => s.Target == ThermalSettingsTarget.GPU); return gpuSensor?.CurrentTemperature; } public void Dispose() { } private static PhysicalGPU? GetInternalDiscreteGpu() { try { return PhysicalGPU .GetPhysicalGPUs() .FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop); } catch { return null; } } }