在 WinPE 中检测交流电源连接?
我正在尝试确定笔记本电脑是否已连接到交流电源。
我运行的操作系统是WinPE。 我的应用程序是用本机 C++ 编写的。
不支持使用 Win32_Battery 的 WMI 查询,并且 GetSystemPowerStatus API 始终为 ACLineStatus 返回“1”(是否使用交流电源运行)。
有任何想法吗?
补充调查: 刚刚尝试使用 POWER_INFORMATION_LEVEL::SystemBatteryState 的 API“CallNtPowerInformation”。 无论电源状态如何,SYSTEM_BATTERY_STATUS 结构元素 AcOnLine 也返回 1。 可能只是调用相同的系统级代码,但我想我会将其添加到这里。
I'm trying to determine if a laptop is connected to AC power.
The OS Im running under is WinPE.
My app is written in native C++.
WMI queries using Win32_Battery are not supported and the GetSystemPowerStatus API always returns '1' for ACLineStatus (running on AC power or not).
Any ideas?
Additonal investigation:
Just tried the API 'CallNtPowerInformation' with POWER_INFORMATION_LEVEL::SystemBatteryState. The SYSTEM_BATTERY_STATUS structure element AcOnLine also returns 1 regardless of power supply status. Probably just calls the same system level code but thought I'd add it in here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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(系统可以访问交流电,因此没有电池放电)或 BatteryStatus = 1(电池正在放电,即交流电未连接)。
驱动程序可以安装在 PE 映像本身中或按需加载。 即驱动负载
I managed to answer my own question and it proved to be very simple in the end.
In WinPE the following noddy script returned null when executed because the battery wasn't being recognised:
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
I found a battery device driver in my PE image (\windows\inf\battery.inf) which once installed resulted in the battery being recognised and the above script returning the expected values. i.e. BatteryStatus = 2 (The system has access to AC so no battery is being discharged) or BatteryStatus = 1 (The battery is discharging i.e. AC not connected).
Driver can be installed in the PE image itself or loaded on demand. i.e. drvload