Skip to content

🔋 WinBat Lens v1.0.9 — 接上電池驅動的第三個 IOCTL

Choose a tag to compare

@nojackno2-ctrl nojackno2-ctrl released this 27 Jul 01:24

🔋 WinBat Lens v1.0.9

接上電池驅動的第三個 IOCTL —— 過去只用了兩個,最有價值的那個一直沒被呼叫。


📥 下載

版本 檔案 大小
安裝版 WinBatLens_v1.0.9_Setup_x64.exe 71.8 MB
免安裝版(單一執行檔) WinBatLens_v1.0.9_Portable_x64.exe 76.7 MB
免安裝版(ZIP) WinBatLens_v1.0.9_Portable_x64.zip 71.0 MB

🔌 問題:只用了三分之二的電池 API

BatteryTelemetryService 只呼叫 IOCTL_BATTERY_QUERY_TAGIOCTL_BATTERY_QUERY_STATUS。第三個 IOCTL_BATTERY_QUERY_INFORMATION 從未使用,而驅動知道的大部分資訊都在裡面。同時 BATTERY_STATUS.Capacity(剩餘容量 mWh)已經讀進 struct 卻被丟掉。

這些全是直接對已開啟的裝置 handle 下 IOCTL:不需提權、不經 WMI、不走 COM。

✅ 現在讀得到什麼

項目 來源
剩餘容量 (mWh)、真實 SoC BATTERY_STATUS.Capacity
設計 / 滿電容量、健康度 BatteryInformation
化學材質、電池名稱、製造商 BatteryInformation / BatteryDeviceName / BatteryManufactureName
循環次數 BatteryInformation
出廠日期與電池役齡 BatteryManufactureDate
電池封裝溫度 BatteryTemperature
驅動自身的續航估算 BatteryEstimatedTime

韌體沒實作的層級連續失敗 3 次後就永久停止查詢,因此不支援的項目只花啟動時 3 次 IOCTL,之後零成本。

📊 powercfg 報告的容量是舊的

並排量測:報告 55,969 mWh,驅動 56,032 mWh。 報告是 Windows 稍早記錄的快照,驅動才是當下的值。解析器現在優先採用驅動數值,健康度因此從 73.6% 修正為 73.7%、損耗從 20,029 修正為 19,966 mWh。

附帶效果:powercfg 報告空白或無法解析的機器,現在依然能得到真實健康度,不會再被誤判成「無電池裝置」。

手動開啟的 HTML 報告不會套用本機驅動資料 —— 那份報告可能來自另一台電腦。

🔧 移除寫死的 56 Wh 電池容量

充飽時間原本是 (100 − 電量%) / 100 × 56.0 ÷ 充電瓦數,把開發用筆電的容量寫死在公式裡,換一台機器就不對。現在改為 (滿電容量 − 目前容量) ÷ 充電瓦數,兩項都是實測值。

剩餘續航在 Windows 尚未給出估算時(拔除電源後約一分鐘內)多了兩層後備:驅動自身的估算,以及「剩餘 Wh ÷ 目前放電瓦數」。後者是兩個實測值的除法,不是負載推估曲線。

電量百分比改用電池自己的 容量 ÷ 滿電容量,充電上限停在 95% 的機器會顯示 95.0%,不再被四捨五入成「已充滿」。

🌡️ 這次的溫度是真的

舊版曾把 CPU 熱區當成電池溫度顯示(v1.0.3 已移除)。BatteryTemperature 是電池自己的感測器,換算自 0.1 K 單位,並排除 -40..80 °C 以外的數值 —— 沒有真正實作該層級的韌體通常回 0,否則會變成看起來很合理的 -273 °C。

開發用的這台機器並不支援。 程式碼保留,因為它在支援的硬體上正確且幾乎免費。畫面上不會出現任何永久空白:溫度、出廠日期、蓄電量三者都是讀不到就整列隱藏或改為說明文字。

🖥️ 介面

  • 電池規格參數:新增「出廠日期」列(含役齡年數),驅動沒提供時隱藏;容量、化學材質、循環次數改以驅動值為準。
  • 剩餘續航卡:電量列附上真實蓄電量,例如 100% · 56.0 / 56.0 Wh
  • 硬體實測功耗:新增「電池蓄電量 (Wh)」列,顯示 56.0 / 56.0 Wh真實 SoC 100.0%,副標為 滿電 56.0 / 76.0 Wh,健康度 73.7%
  • 智慧診斷:循環次數空白時明確說明是韌體未實作而非讀取失敗;有出廠日期時新增電池役齡項目。

📈 兩個順手修正

波形圖的電池線被獨顯壓扁。 Y 軸取三條線的最大值,獨顯滿載 76 W 時軸上限跳到 92 W,充放電線被壓在底部貼地。現在電池與獨顯各自縮放,獨顯改用右側青色刻度(與獨顯線、圖例同色),沒有量測到獨顯瓦數時整條右軸隱藏。

容量歷史的整數健康度沒對齊。 74.0 在一整欄 73.6 之中會顯示成 74,已改為固定一位小數。