Acionando tarefas e executando programas quando o Windows 7 está conectado ou desconectado? [duplicado]

3

Duplicata Possível:
Existe uma maneira de executar um programa em eventos de energia?

Existe um evento do Windows que posso assistir no Agendador de Tarefas que será acionado quando a energia estiver conectada? E um evento quando a energia é desconectada?

Eu quero iniciar e parar o CrashPlan enquanto estiver usando a energia da bateria. (Este tem sido um Pedido de recurso de 2,5 anos em CrashPlan e honestamente eu não posso esperar por eles para adicioná-lo.)

Outros também perguntaram anteriormente como desativar SuperFetch e Indexação de pesquisa com a energia da bateria. Eu acho que esse truque vai resolver essas questões também.

Existe um evento do tipo windows? Se não, pode haver um programa que eu possa instalar que detecte alterações de energia, que eu possa criar um gatilho do Agendador de Tarefas para.

William C
fonte

Respostas:

3

Por padrão, o Windows não registra um evento quando você desconecta ou conecta seu computador.

No entanto, com o PowerShell, você pode ouvir essa alteração e gravar seus próprios eventos no log. Este script fará isso:

New-EventLog -Source BatteryStatusMonitor -LogName Application

Function OnBatteryStatusChange ($NewStatus) {
  If ($NewStatus -eq 1) {
    $EventID = 5001
    $Message = "The computer was unplugged."
  } ElseIf ($NewStatus -eq 2) {
    $EventID = 5002
    $Message = "The computer was plugged in."
  } Else {
    $EventID = 5000
    $Message = "Battery status changed to $NewStatus"
  }
  Write-EventLog -LogName Application -Source BatteryStatusMonitor -EventID $EventID -Message $Message
}

$Query = "select * from __instancemodificationevent within 3 where targetinstance isa 'win32_battery' and targetinstance.batterystatus <> previousinstance.batterystatus"

Register-WmiEvent -Query $Query -Action {OnBatteryStatusChange $Event.SourceEventArgs.NewEvent.TargetInstance.BatteryStatus} -SourceIdentifier "BatteryStatusChange"

For (;;) {}
William Jackson
fonte
0

Se você está interessado apenas em suportar o Windows Vista e acima, registrar-se para eventos de energia .

Usar RegisterPowerSettingNotification com o valor GUID_ACDC_POWER_SOURCE.

CoreTech
fonte
Se o único evento OP deseja capturar é uma alteração no status do carregador AC através da API do Win32, ele pode simplesmente manipular eventos PBT_APMPOWERSTATUSCHANGE por meio do código de controle SERVICE_CONTROL_POWEREVENT no retorno de chamada HandlerEx para RegisterServiceCtrlHandlerEx ou a mensagem WM_POWERBROADCAST no WindowProc. Isso deve ser suportado pelo Windows XP e posterior. No entanto, ele pediu um evento do Windows.
Kevin Jin