質問
ラップトップが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