電池資訊
電池可為在無中斷電源供應器上執行的可攜式電腦和電腦提供電源, (UPS) 。 在這些電腦上,作業系統會提供電池狀態的相關資訊,讓應用程式可以為使用者提供實用的功能。 (不支援某些較舊的非標準電池系統和 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輸出緩衝區中的BatteryUniqueID值。
相關主題