记录电源/电池事件

时间:2013-08-29 14:42:52

标签: windows events logging scheduled-tasks

刚买了一个APC备用电池,并将USB数据线连接到我的Windows 7电脑上。它自动安装了一个驱动程序,现在在Windows托盘中我看到一个带有电源插头图标的电池,它显示了一个充电百分比。当我从墙上拔下UPS时,桌面进入电池模式,小图标也会改变......就像它是一台笔记本电脑一样。

我想要做的是在此事件发生时运行任务。不幸的是,电源状态的更改不会在事件查看器中记录事件,因此我可以将任务附加到它。显然正在发生一些事情,因为图标正在发生变化。如何在电源状态变为电池时记录事件?

谢谢, AD

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用WMI通知始终运行脚本。下面是一个脚本,它监视Win32_Battery WMI类中对象的更改并报告所做的更改:

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

希望这有帮助,如果您有任何问题,请与我联系。