【问题标题】:Logging power / battery events记录电源/电池事件
【发布时间】:2013-08-29 14:42:52
【问题描述】:

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

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

谢谢, 广告

【问题讨论】:

    标签: windows events logging scheduled-tasks


    【解决方案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
    

    希望对您有所帮助,如果您有任何问题,请给我留言。

    【讨论】:

    • 无法弄清楚如何给您留言。我的问题:这个脚本是用什么语言编写的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多