用WMI方式查看了一下自己筆記本電池的剩余時間,結果得到了71582788分鐘這個結果,頓感意外,第一感覺是相關的代碼寫錯了。
ManagementObjectSearcher s = new ManagementObjectSearcher("select * from Win32_Battery"); ManagementObjectCollection m = s.Get(); foreach (ManagementObject mo in m) { Console.WriteLine(mo["EstimatedRunTime"].ToString() + "minutes"); }
檢查了幾遍,沒有發現問題,又在網上搜尋類似的代碼,也是這般的寫法。
在被困擾了一段時間後,嘗試著拔掉了筆記本的電源線,再次啟動程序,這次不是71582788這個數值了。
所以結論是該代碼只有在不使用外接電源的情況下才能獲得正確的結果。
那麼在使用外接電源的時候為什麼會得到71582788這麼奇怪的數字呢?
其實從EstimatedRunTime這個屬性得到的值是以分鐘為單位的。71582788分鐘換算成秒就是4294967296,也就是2^32。一個32位秒計數器的最大值就是這個值。
換句話來講,因為插上電源的情況下,理論上筆記本可以一直使用下去,所以EstimatedRunTime使用71582788分鐘來表示可以無限使用的含義。
以上純屬本人的猜測。
需要補充的是,既使拔了電源線,最後所得的結果也未必是正確的。
可以多運行幾次這個程序,不難發現,每次的結果都是不一致的,而且差異很大,甚至誤差在一個小時以上。
不過這又是屬於正常的結果。因為筆記本的剩余電量顯示原本就是這副樣子的,其系統自帶的偵測程序也有同樣的問題。就目前而言,這應該屬於暫時無法解決的問題吧。
原文同步發布於我的個人博客