バッテリー情報

バッテリは、無停電電源装置 (UPS) で動作するポータブル コンピューターやコンピューターに電力を供給できます。 これらのコンピューターでは、オペレーティング システムはバッテリの状態に関する情報を提供し、アプリケーションがユーザーに役立つ機能を提供できるようにします。 (一部の古い非標準バッテリ システムと UPS はサポートされていません)。

この概要では、 デバイス管理に精通していることを前提としています。

バッテリの状態に関する情報を取得するには、 GetSystemPowerStatus 関数を使用します。この関数は、システム内のすべての電源に関する一般的な情報を返します。 可能な場合は常に GetSystemPowerStatus を 使用する必要があります。

ただし、場合によっては、個々のバッテリーに関する詳細情報が必要になります。 このため、各バッテリ デバイスは IOCTL インターフェイスを公開します。 DeviceIoControl 関数を使用して、次の IOCTL 操作が実行されます。

IOCTL_BATTERY_QUERY_INFORMATION
IOCTL_BATTERY_QUERY_STATUS
IOCTL_BATTERY_QUERY_TAG
IOCTL_BATTERY_SET_INFORMATION

このインターフェイスを使用するには、アプリケーションで複数の手順を実行する必要があります。 まず、セットアップ ルーチンを使用して、バッテリ クラス インターフェイスを持つすべてのデバイスを列挙する必要があります。 これらのデバイスは、システムに存在する実際のバッテリではなく、バッテリ ポートを表します。 その後、アプリケーションは、 DeviceIoControl 関数を使用してデバイスに要求を送信し、挿入されたバッテリのタグを取得できるように、各デバイスへのハンドルを開く必要があります。 これらの手順を完了すると、アプリケーションは各バッテリ デバイスにクエリを送信できます。

バッテリー タグ

各バッテリ デバイスは、バッテリーを挿入できるスロットを表すので、他の方法でバッテリーを取り外して再挿入、交換、または交換するタイミングを判断する方法が必要です。 これを行うには、特定のスロットの各バッテリーにタグが割り当てられます。 このタグは、情報のすべてのクエリに使用する必要があります。 アプリケーションによって提供されるタグがバッテリと一致しない場合、クエリは失敗し、何らかの方法でバッテリーが変更されたことをアプリケーションに示します。 クエリを正常に完了するには、新しいバッテリー タグが必要です。 IOCTL_BATTERY_QUERY_TAG操作を使用してタグを取得します。 そのスロットにバッテリーが存在する場合、返されるタグを他のバッテリ IOCTL のいずれかに渡して、他の機能を実行できます。 マルチバッテリ システムでは、各バッテリ デバイス (スロット) が個別にバッテリ タグを発行するため、2 つの個別のデバイスのタグが一致する場合があります。

バッテリー タグの変更は、必ずしもバッテリが取り外され、再挿入または交換されたことを意味するとは限りません。 通常は静的であるいずれかのデータに変更がある場合は、新しいタグを生成できます。 たとえば、バッテリーの充電が完了すると、最後に完全に充電された容量が変更された可能性があります。 このタグは、バッテリー通信が一時的に失われた場合や、BIOS からの不適切な通知があった場合にも変更される可能性があります。 一部のシステムでは、AC 状態が変わるたびにバッテリー タグが更新される場合があります。 この動作は、バッテリ システムの特性が原因であり、一般的ではありません。

バッテリー タグが更新されるたびに、バッテリーは新しいバッテリーのように扱われ、キャッシュされたすべてのデータを再読み取りする必要があります。 同じ物理バッテリが存在するかどうかをアプリケーションで認識する必要がある場合は、BatteryUniqueID 情報レベルで呼び出されたときに、IOCTL_BATTERY_QUERY_INFORMATIONの出力バッファーに BatteryUniqueID の値をチェックする必要があります。

電源管理について

バッテリ デバイスの列挙