Я в основном ищу способ выполнить приложение, когда мои переходы ноутбука к заряду батареи и, точно так же когда он возвращается к AC.
Существует ли встроенный рычаг в Windows или стороннем приложении, которое позволит мне отвечать на такие события?
Править
Я изучил TaskScheduler, пытающийся исчерпать задачу на событии "питания", но никакое событие, кажется, не зарегистрировано при переключении на батарею.
Я записал приложение (http://batterysaver.codeplex.com/), который прислушается к изменению режима питания, передают и выполняют действия на основе конфигурации XML.
Если кто-то еще может использовать его или расширить его, то потрясающий. Если существует что-то лучше, то отправьте его.
Не знайте о простой команде, которую можно выполнить для этого, но сценарии должны смочь сделать это.
Попытайтесь прервать событие 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