我在试着确定笔记本电脑是否连接到了交流电源。
运行Im的操作系统是WinPE。我的应用程序是用原生C++编写的。
不支持使用Win32_Battery的GetSystemPowerStatus查询,并且对于ACLineStatus (无论是否使用交流电源运行),WMI API始终返回“1”。
有什么想法吗?
附加调查:我刚刚在POWER_INFORMATION_LEVEL::SystemBatteryState中尝试了'CallNtPowerInformation‘接口。无论电源状态如何,SYSTEM_BATTERY_STATUS结构元素AcOnLine也会返回1。可能只是调用相同的系统级代码,但我认为我应该在这里添加它。
发布于 2009-07-10 14:30:53
我设法回答了我自己的问题,最后证明它很简单。
在WinPE中,以下节点脚本在执行时返回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(系统可接入AC,因此没有电池正在放电)或BatteryStatus =1(电池正在放电,即AC未连接)。
驱动程序可以安装在PE镜像本身中,也可以按需加载。即drvload
https://stackoverflow.com/questions/1001719
复制相似问题