在WinPE中检测交流电源连接?

时间:2009-06-16 14:07:17

标签: c++ winapi wmi winpe

我正在尝试确定笔记本电脑是否连接到交流电源。

运行的操作系统是WinPE。 我的应用程序是用本机C ++编写的。

不支持使用Win32_Battery的WMI查询,并且GetSystemPowerStatus API始终为ACLineStatus返回“1”(在AC电源上运行或不运行)。

有什么想法吗?

附加调查: 刚刚使用POWER_INFORMATION_LEVEL :: SystemBatteryState尝试了API'CallNtPowerInformation'。无论电源状态如何,SYSTEM_BATTERY_STATUS结构元素AcOnLine也返回1。可能只是调用相同的系统级代码,但我想我会在这里添加它。

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