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.

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 (;;) {}

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.