質問

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

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

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

アイデアはありますか

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

役に立ちましたか?

解決

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

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

strComputer ="。" Set objWMIService = GetObject(" winmgmts:\"& strComputer&" \ root \ CIMV2") Set colItems = objWMIService.ExecQuery(" SELECT * FROM Win32_Battery" ,, 48) colItemsの各objItemについて     Wscript.Echo objItem.BatteryStatus     Wscript.Echo objItem.Caption 次へ

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top