刚买了一个 APC 备用电池并将 USB 数据线连接到我的 Windows 7 计算机。它自动安装了一个驱动程序,现在在 Windows 托盘中我看到一个带有电源插头图标的电池,它显示了一个充电百分比。当我从墙上拔下 UPS 时,桌面进入电池模式,小图标发生变化……就像笔记本电脑一样。
我想做的是在这个事件发生时运行一个任务。不幸的是,电源状态的更改不会在事件查看器中记录事件,因此我可以将任务附加到它。显然有些事情正在发生,因为图标正在改变。当电源状态变为电池时,如何记录事件?
谢谢,广告
刚买了一个 APC 备用电池并将 USB 数据线连接到我的 Windows 7 计算机。它自动安装了一个驱动程序,现在在 Windows 托盘中我看到一个带有电源插头图标的电池,它显示了一个充电百分比。当我从墙上拔下 UPS 时,桌面进入电池模式,小图标发生变化……就像笔记本电脑一样。
我想做的是在这个事件发生时运行一个任务。不幸的是,电源状态的更改不会在事件查看器中记录事件,因此我可以将任务附加到它。显然有些事情正在发生,因为图标正在改变。当电源状态变为电池时,如何记录事件?
谢谢,广告
One way to do this is with a script running all the time using WMI notifications. Below is a script that watches for changes to objects in the Win32_Battery WMI class and reports on the changes made:
strComputer = "."
' Connect to WMI
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Create the Sink object used for the asynchronous notification.
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
' Send the query asynchronously. The SINK_OnObjectReady subroutine will be
' called if any data comes in.
objWMIService.ExecNotificationQueryAsync objSink, "SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE " _
& "TargetInstance ISA 'Win32_Battery'"
while 1
Wscript.Sleep(1000)
Wend
Sub SINK_OnCompleted(iHResult, objErrorObject, objAsyncContext)
WScript.Echo "Asynchronous operation is done."
End Sub
Dim intLastLevel
intLastLevel = 0
Sub SINK_OnObjectReady(objObject, objAsyncContext)
' This runs whenever a change is made to the Win32_Battery object for
' your computer's battery. For more useful properties of this class,
' see: http://msdn.microsoft.com/en-us/library/aa394074(v=vs.85).aspx
Set objEvent=objObject.TargetInstance
Select Case objEvent.BatteryStatus
Case 1
if intLastLevel <> objEvent.EstimatedChargeRemaining Then
Wscript.Echo "Battery is discharging."
Wscript.Echo "Battery has", objEvent.EstimatedChargeRemaining + 1, "% left on battery."
Wscript.Echo "Battery has", objEvent.EstimatedRunTime, " minutes left on battery."
intLastLevel = objEvent.EstimatedChargeRemaining
End If
Case 2
Wscript.Echo "Battery is connected to AC."
Case 3
Wscript.Echo "Battery is fully charged."
Case 4
Wscript.Echo "Battery is currently low."
Case 5
Wscript.Echo "Battery is currently critically low."
Case 6
Wscript.Echo "Battery is currrently charging."
Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
Case 7
Wscript.Echo "Battery is currrently charging and has high charge."
Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
Case 8
Wscript.Echo "Battery is currrently charging and has low charge."
Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
Case 9
Wscript.Echo "Battery is currrently charging and has critically low charge."
Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
Case 10
Wscript.Echo "Battery doesn't know what's going on."
Case 11
Wscript.Echo "Battery is partially charged."
End Select
End Sub
Hope this helps, drop me a line if you have any questions.