⚡ WinBat Lens v1.0.3 — 改用真實硬體感測器、移除偽造的電池溫度
⚡ WinBat Lens v1.0.3
這一版修正了兩個真實的數據錯誤。 起因是使用者發現跑 3DMark 時,本程式顯示的瓦數與 ASUS Armoury Crate 對不上 —— 確實對不上,而且原因有兩個。
📥 下載
| 版本 | 檔案 | 大小 |
|---|---|---|
| 安裝版 | WinBatLens_v1.0.3_Setup_x64.exe |
71.8 MB |
| 免安裝版(單一執行檔) | WinBatLens_v1.0.3_Portable_x64.exe |
76.7 MB |
| 免安裝版(ZIP) | WinBatLens_v1.0.3_Portable_x64.zip |
71.0 MB |
❌ 錯誤一:所有瓦數都是「用使用率套公式猜的」
程式碼裡沒有任何一個瓦數是量測來的。用當時的截圖反推可以完全吻合:
dGPU: 3.0 + 0.869 × 35.0 = 33.4 W ← 畫面顯示 ~33.4 W
CPU : 2.5 + 0.184 × 22.5 = 6.6 W ← 畫面顯示 ~6.6 W
而且公式有寫死的天花板:dGPU 最高只能算到 38 W,全系統最高 93.5 W。這台的 RTX 3060 Laptop 光 GPU 的 TGP 就能到 115 W(當下 Armoury Crate 顯示 60 W)。更明顯的是,閒置時公式直接回報 0 W,但 nvidia-smi 實測是 18.76 W。
❌ 錯誤二:「電池溫度」其實是 CPU 溫度
該數值來自 Win32_PerfFormattedData_Counters_ThermalZoneInformation,這台機器上唯一的熱感測區是 \_TZ.THRM,卻被標示成「🔋 電池物理狀態(電壓/電流/溫度)」,副標還寫「WMI & ACPI 即時電氣感測」。
截圖當下顯示「電池」81.1 °C,而 Armoury Crate 顯示 CPU 81 °C —— 同一個數字。鋰電池到 81 °C 早就起火了。
真正的電池溫度來源(MSAcpi_ThermalZoneTemperature、MSBatteryClass)在這台機器上拿不到,因此溫度顯示已完全移除,而非改標示 —— 卡片、清單欄位、CSV 欄位、中英文字串全部拿掉。
✅ 改用真實硬體感測器
新增 HardwareSensorService,整合 LibreHardwareMonitor。每個讀數都是可為空的:取不到就明確標示為推估,絕不編造數字。
本機(Ryzen + RTX 3060 Laptop)一般權限下的實測結果:
| 感測器 | 結果 |
|---|---|
| NVIDIA GPU 功耗 | ✅ 真實,11~19 W 即時跟隨 |
| GPU 核心 / 熱點溫度 | ✅ 真實 |
| 電池電壓 | ✅ 15.83 V |
| CPU 功耗 | ❌ RAPL 需要核心驅動(需系統管理員權限) |
| AMD 內顯功耗 | ❌ 硬體根本沒有此感測器 |
畫面上現在會明確區分:
18.8 W (實測) ← 來自硬體感測器
~6.6 W (推估) ← 來自使用率公式
🔧 過程中量測到的三件事
- 一次完整感測掃描要 85~256 ms —— 絕不能放在每秒一次的 UI 執行緒上。已改為背景執行緒輪詢,UI 只讀快取,成本降到 0.003 ms。
- CPU 硬體更新是掃描中最慢的部分,而在拿不到 RAPL 時毫無意義,因此偵測到不可用就直接跳過。
- 每個感測器預設會保留一整天的歷史數值 —— 以 1 Hz 輪詢約 40 個感測器,3 分鐘內私有記憶體就從 139 MB 漲到 159 MB。關閉歷史保留後穩定在 ~139 MB,托盤背景工作集甚至降到 23.8 MB(比上一版的 26.4 MB 更好)。
啟動速度僅從 ~373 ms 變成 ~383 ms,因為感測器初始化(約 1 秒)掛在既有的背景預熱執行緒上,不影響首次繪製。
⚠️ 已知限制
CPU 功耗仍為推估值。 Intel/AMD 的 RAPL 需要核心驅動,也就是需要以系統管理員權限執行。要讓它變成實測值,代價是每次啟動都跳 UAC,而且會讓開機自動啟動的登錄設定變複雜 —— 這是產品取捨,尚未決定。
執行檔未經數位簽章,首次執行 SmartScreen 會警告,請點「其他資訊」→「仍要執行」。
完整差異: v1.0.2...v1.0.3