2

ラップトップが AC 電源に接続されているかどうかを確認しようとしています。

下で実行されている OS Im は WinPE です。私のアプリはネイティブ C++ で書かれています。

Win32_Battery を使用した WMI クエリはサポートされておらず、GetSystemPowerStatus API は常に ACLineStatus (AC 電源で実行されているかどうか) に対して「1」を返します。

何か案は?

追加調査: API 'CallNtPowerInformation' を POWER_INFORMATION_LEVEL::SystemBatteryState で試してみました。SYSTEM_BATTERY_STATUS 構造要素 AcOnLine も、電源の状態に関係なく 1 を返します。おそらく同じシステムレベルのコードを呼び出すだけですが、ここに追加すると思いました。

4

1 に答える 1

1

私はなんとか自分の質問に答えることができましたが、最終的には非常に簡単であることがわかりました.

WinPE では、バッテリーが認識されていないため、次の noddy スクリプトを実行すると null が返されました。

strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Battery",,48) For Each objItem in colItems Wscript.Echo objItem.BatteryStatus Wscript. Echo objItem.Caption Next

PE イメージ (\windows\inf\battery.inf) にバッテリー デバイス ドライバーが見つかりました。これをインストールすると、バッテリーが認識され、上記のスクリプトが期待値を返します。つまり、BatteryStatus = 2 (システムは AC にアクセスできるため、バッテリは放電されていません) または BatteryStatus = 1 (バッテリは放電中、つまり AC が接続されていません)。

ドライバーは、PE イメージ自体にインストールすることも、オンデマンドでロードすることもできます。つまり、drvload

于 2009-07-10T14:30:53.060 に答える