Skip to content

🔋 WinBat Lens v1.0.4 — 電池充放電瓦數改為真實量測

Choose a tag to compare

@nojackno2-ctrl nojackno2-ctrl released this 25 Jul 14:12

⚡ 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.DischargeRateroot\CIMV2)—— 這個屬性在本機和許多筆電上是空的。但 root\WMI BatteryStatus 和底層的 IOCTL_BATTERY_QUERY_STATUS 一直都正常運作。

換句話說,電池明明有回報真實數值,程式卻退回去用推估值。

之前判斷「EC 不支援」是錯的

所有先前的測試都是在電池滿電且插著電源的狀態下做的。RemainingCapacity 等於 FullChargedCapacity,此時電池沒有任何電流進出 —— 0 mW 就是正確答案,卻被誤判成「不支援」。

關鍵線索是:驅動回傳的是實實在在的 0,而不是規格保留給「真的讀不到」的 BATTERY_UNKNOWN_RATE0x80000000)。

拔掉電源實測後完全證實:

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