電池資訊
電池可為在不間斷電源供應器上執行的攜帶型電腦和電腦提供電源。 在這些電腦上,作系統會提供電池狀態的相關信息,讓應用程式可以為使用者提供有用的功能。 (不支援一些較舊的非標準電池系統和 UPS。
請注意,此概觀假設您已熟悉 裝置管理。
若要取得電池狀態的相關信息,請使用 getSystemPowerStatus函式,這會傳回系統中所有電源的一般資訊。 您應該盡可能使用 GetSystemPowerStatus。
不過,在某些情況下,需要每個個別電池的詳細資訊。 為此,每個電池裝置都會公開IOCTL介面。 下列 IOCTL 作業是使用 deviceIoControl函式來執行:
IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION
若要使用此介面,應用程式必須遵循數個步驟。 首先,它必須使用設定例程來列舉具有電池類別介面的所有裝置。 請注意,這些裝置代表電池埠,而不是系統中的實際電池。 然後,應用程式必須開啟每個裝置的句柄,以便使用 DeviceIoControl 函式,將要求傳送至裝置,然後取得插入的任何電池標記。 完成這些步驟之後,應用程式可以將查詢傳送至每個電池裝置。
電池標記
由於每個電池裝置都代表可插入電池的插槽,因此必須有一種方式可以判斷電池何時移除並重新插入、更換或變更任何其他方式。 若要這樣做,特定插槽中的每個電池都會指派標記。 此標記必須用於所有查詢以取得資訊。 如果應用程式提供的標記與電池不符,查詢會失敗,指出應用程式已以某種方式變更電池。 若要順利完成查詢,則需要新的電池標記。 使用 IOCTL_BATTERY_QUERY_TAG 作業取得標記。 如果該插槽中有電池,傳回的標記可以傳遞至任何其他電池 IOCTL 來執行其他功能。 在多電池系統上,每個電池裝置(插槽)都會獨立發出電池標記,因此來自兩個不同裝置的標記有時可能相同。
電池標記的變更不一定表示電池已移除並重新插入或更換。 如果任何通常為靜態的數據有所變更,就可以產生新的標記。 例如,當電池完成充電時,最後一個完全充電容量可能會變更。 如果電池通訊暫時遺失,或 BIOS 有不正確的通知,標記也可以變更。 在某些系統上,每當 AC 狀態變更時,可能會更新電池標記。 此行為是由於電池系統的特性,並不常見。
每當電池標記更新時,應該將電池視為新的電池,而且所有快取的數據都應該重新讀取。 如果應用程式需要知道相同的實體電池是否存在,當使用 BatteryUniqueID 資訊層級呼叫時,應該檢查 IOCTL_BATTERY_QUERY_INFORMATION 輸出緩衝區中 BatteryUnique ID 的值。
相關主題