电池信息

电池可为便携式计算机和在不间断电源上运行的计算机提供动力, (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 发出了不正确的通知,标记也会更改。 在某些系统上,只要交流状态发生更改,电池标记就会更新。 此行为是由于电池系统的特征造成的,并不常见。

每当更新电池标记时,应将电池视为新电池,并重新读取所有缓存的数据。 如果应用程序需要知道是否存在相同的物理电池,则当使用 BatteryUniqueID 信息级别调用时,它应在 IOCTL_BATTERY_QUERY_INFORMATION 的输出缓冲区中检查 BatteryUniqueID 的值。

关于电源管理

枚举电池设备