Eu não sei se existem utilitários de terceiros para fazer isso, mas o Windows tem mecanismos internos para monitorar o status da bateria. A boa notícia é que ele disponibiliza uma grande quantidade de informações sobre sua bateria. A má notícia é que isso não facilita a sua utilização.
Uma ótima maneira de realizar o que você deseja é usar um script para iniciar seus aplicativos. Eu bati um exemplo de script abaixo. Basta copiar / colar no Bloco de Notas, ajustá-lo como quiser e, em seguida, salvá-lo como um arquivo com extensão .vbs . Uma vez que você o tenha trabalhado, você pode soltá-lo no seu grupo de inicialização ou o que quer que seja.
NOTA: Esse script é algo que eu inventei em dez minutos. Você deve começar, mas eu não testei completamente. Os valores retornados pelo BatteryStatus estão documentados em esta página do MSDN . Você pode ter que experimentar para ver qual valor é relatado sob quais circunstâncias.
Option Explicit
Const execApp1 = "application string goes here"
Const execApp2 = "example: "c:\full\path\to.exe /arg1 /arg2"
Const execApp3 = "Use double quotes around things with spaces ""like so""."
Dim objShell :Set objShell = CreateObject("WScript.Shell")
Dim objWMI :Set objWMI = GetObject("winmgmts:\.\root\CIMV2")
Dim objBatteries :Set objBatteries = objWMI.ExecQuery("SELECT * FROM Win32_Battery",,48)
Dim objBattery :Set objBattery = Nothing
Dim onACPower :onACPower = False
For Each objBattery in objBatteries
If objItem.BatteryStatus = 2 Then '2 is the value I got on a full battery. You may need to experiment with this.
onACPower = True
End If
Next
'Here's where you decide if you're on battery or AC and what to run in each case.
If onACPower = True Then objShell.Run execApp1, 0, False
If onACPower = False Then objShell.Run execApp2, 0, False
If onACPower = True Then objShell.Run execApp3, 0, False