电池信息

电池可以为在不间断电源(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 的值。

关于电源管理

枚举电池设备