2

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

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

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

有任何想法吗?

附加调查:刚刚使用 POWER_INFORMATION_LEVEL::SystemBatteryState 尝试了 API 'CallNtPowerInformation'。无论电源状态如何,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(系统可以使用交流电,因此没有电池正在放电)或 BatteryStatus = 1(电池正在放电,即交流电未连接)。

驱动程序可以安装在 PE 映像本身中,也可以按需加载。即驱动加载

于 2009-07-10T14:30:53.060 回答