🔋 WinBat Lens v1.0.4 — 電池充放電瓦數改為真實量測
⚡ WinBat Lens v1.0.4
電池充放電瓦數現在是真實量測值了。
📥 下載
| 版本 | 檔案 | 大小 |
|---|---|---|
| 安裝版 | WinBatLens_v1.0.4_Setup_x64.exe |
71.8 MB |
| 免安裝版(單一執行檔) | WinBatLens_v1.0.4_Portable_x64.exe |
76.7 MB |
| 免安裝版(ZIP) | WinBatLens_v1.0.4_Portable_x64.zip |
71.0 MB |
🔋 核心修正:電池瓦數一直都讀得到,是程式問錯地方
程式原本讀 Win32_Battery.DischargeRate(root\CIMV2)—— 這個屬性在本機和許多筆電上是空的。但 root\WMI BatteryStatus 和底層的 IOCTL_BATTERY_QUERY_STATUS 一直都正常運作。
換句話說,電池明明有回報真實數值,程式卻退回去用推估值。
之前判斷「EC 不支援」是錯的
所有先前的測試都是在電池滿電且插著電源的狀態下做的。RemainingCapacity 等於 FullChargedCapacity,此時電池沒有任何電流進出 —— 0 mW 就是正確答案,卻被誤判成「不支援」。
關鍵線索是:驅動回傳的是實實在在的 0,而不是規格保留給「真的讀不到」的 BATTERY_UNKNOWN_RATE(0x80000000)。
拔掉電源實測後完全證實:
21:54:24 電池 放電中 -5.51 W ← 剛拔電、閒置
21:54:38 電池 放電中 -22.29 W
21:54:57 電池 放電中 -30.91 W
21:58:45 電池 放電中 -39.90 W ← 負載上升
21:58:51 市電 0.00 W ← 插回電源
✨ 新增 BatteryTelemetryService
直接對電池類別驅動下 IOCTL_BATTERY_QUERY_STATUS:
- 不需要系統管理員權限,也不經過 WMI/COM
- 實測每次讀取 平均 0.4 ms(對照 LibreHardwareMonitor 掃描要 85~256 ms),因此可以安心地每秒更新
- 電壓在同一次呼叫就取得,省掉一次 WMI 查詢
- 用
IsRateKnown區分「真的是 0」與「讀不到」,確保這個 bug 不會重演 - 方向以驅動的充/放電旗標判定並取絕對值(不是每家驅動都遵守「負值代表放電」的慣例)
🎯 電池供電時,數字是整台機器的真實耗電
這個值直接量測自電池本身,不做任何元件加總推估。同時也巧妙繞過了 v1.0.3 遇到的問題 —— CPU 功耗因為 Armoury Crate 佔用 AMD SMU 而讀不到。
🧹 順手移除另外兩個編造的數值
- 充電瓦數原本會依電量退回寫死的
12.5 / 28.0 / 45.0 W。現在讀不到就顯示--。 - 是否充電原本用
電量 >= 98%推斷。這在有充電上限的筆電上是錯的 —— 本機約 95% 就停止充電,舊邏輯會誤判成「仍在充電」。現在改用驅動本身的充電旗標。
⚠️ 市電輸入瓦數仍是推估值
Windows 沒有任何標準 API 可以讀變壓器輸入功率,那屬於各家 EC 的私有實作(所以原廠工具讀得到,第三方讀不到)。此數值維持為「充電功率 + 硬體推估」,並以 ~ 明確標示。
執行檔未經數位簽章,首次執行 SmartScreen 會警告,請點「其他資訊」→「仍要執行」。
完整差異: v1.0.3...v1.0.4