我正在尝试确定笔记本电脑是否连接到交流电源。
运行的操作系统是WinPE。 我的应用程序是用本机C ++编写的。
不支持使用Win32_Battery的WMI查询,并且GetSystemPowerStatus API始终为ACLineStatus返回“1”(在AC电源上运行或不运行)。
有什么想法吗?
附加调查: 刚刚使用POWER_INFORMATION_LEVEL :: SystemBatteryState尝试了API'CallNtPowerInformation'。无论电源状态如何,SYSTEM_BATTERY_STATUS结构元素AcOnLine也返回1。可能只是调用相同的系统级代码,但我想我会在这里添加它。
答案 0 :(得分:1)
我设法回答了我自己的问题,最终证明它非常简单。
在WinPE中,以下noddy脚本在执行时返回null,因为电池未被识别:
strComputer =“。” 设置objWMIService = GetObject(“winmgmts:\”& strComputer&“\ root \ CIMV2”) 设置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