Существует ли способ выполнить программу на событиях питания?

Я в основном ищу способ выполнить приложение, когда мои переходы ноутбука к заряду батареи и, точно так же когда он возвращается к AC.

Существует ли встроенный рычаг в Windows или стороннем приложении, которое позволит мне отвечать на такие события?

Править

Я изучил TaskScheduler, пытающийся исчерпать задачу на событии "питания", но никакое событие, кажется, не зарегистрировано при переключении на батарею.

10
задан 17.03.2010, 20:21

2 ответа

Я записал приложение (http://batterysaver.codeplex.com/), который прислушается к изменению режима питания, передают и выполняют действия на основе конфигурации XML.

Если кто-то еще может использовать его или расширить его, то потрясающий. Если существует что-то лучше, то отправьте его.

7
ответ дан 07.12.2019, 12:53

Не знайте о простой команде, которую можно выполнить для этого, но сценарии должны смочь сделать это.

Попытайтесь прервать событие Win32_PowerManagementEvent в PowerShell или WSH. tomshardware статья имеет некоторый код vbscript, но я думаю, что Вам будет нужен случай для eventtype 10 (powerstate изменение). StackOverflow имеет некоторые идеи в том, Как я могу знать, когда Windows идет в режим Hibernate или сон?, хотя необходимо будет расшириться, идея обработать изменение состояния электропитания вместо спят / в спящем режиме. Вы могли бы также найти некоторые идеи в коде для вопроса, Как каждый использует ManagementEventWatcher для отслеживания, приостанавливают/возобновляют?

Править: На самом деле попробуйте что-то вроде этого. Это полностью взламывается вместе, таким образом, это не симпатично. Измените операторы Echo, чтобы сделать независимо от того, что Вы хотите, если изменение в питании постоянным током или питании переменным током обнаруживается. Выполненный с cscript power.vbs

power.vbs

Dim battery_status, prev_status
prev_status = CheckBattery
Set colMonitoredEvents = GetObject("winmgmts:\\.\root\cimv2")._
    ExecNotificationQuery("Select * from Win32_PowerManagementEvent")
Do
    Set strLatestEvent = colMonitoredEvents.NextEvent
    If strLatestEvent.EventType = 10 Then
        battery_status = CheckBattery
        If battery_status <> prev_status Then
            If battery_status = 1 Then
                Wscript.Echo "DC power"
            ElseIf battery_status = 2 Then
                Wscript.Echo "AC power"
            End If
        End If
    End If
    prev_status = battery_status
Loop

Function CheckBattery
    Dim oWMI, items, item
    Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
    Set items = oWMI.ExecQuery("Select * from Win32_Battery",,48)
    For Each item in items
        If item.BatteryStatus = 1 Then
            CheckBattery = 1
            Exit Function
        ElseIf item.BatteryStatus = 2 then
        CheckBattery = 2
            Exit Function
        End If
    Next
End Function
4
ответ дан 07.12.2019, 12:53

Теги

Похожие вопросы