Estoy ejecutando Windows 8.1 (pero eso no debería importar) en una computadora portátil y me preguntaba si sería posible modificar el proceso de inicio de manera que:
Ciertos programas SÓLO se inician cuando estás enchufado (alimentación) y otros programas SÓLO se inician cuando NO estás enchufado.
¿Es posible? y si lo es, cómo?
Respuesta1
No sé si existen utilidades de terceros para hacer esto, pero Windows tiene mecanismos integrados para monitorear el estado de la batería. La buena noticia es que pone a su disposición una gran cantidad de información sobre su batería. La mala noticia es que no te facilita en absoluto su uso.
Una excelente manera de lograr lo que desea es utilizar un script para iniciar sus aplicaciones. Preparé un script de muestra a continuación. Simplemente cópielo y péguelo en el Bloc de notas, modifíquelo como desee y luegoguárdelo como un archivo con extensión .vbs. Una vez que lo tengas funcionando, puedes colocarlo en tu grupo de Inicio o lo que sea.
NOTA:Este guión es algo que preparé en diez minutos. Debería ayudarte a empezar, pero no lo he probado a fondo. Los valores devueltos por BatteryStatus están documentados enesta página de MSDN. Es posible que tenga que experimentar para ver qué valor se informa y en qué circunstancias.
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
Respuesta2
Gracias a Wes Sayeed por indicarme la dirección correcta, aquí está el resultado final. Sin embargo, tenga en cuenta que es posible que los programas no se ejecuten igual que en su computadora, ya que los usé como ejemplo y es posible que cualquier sintaxis agregada no tenga nada que ver. hazlo con los programas tal como los conoces...
Option Explicit
Const execApp1 = """C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"""
Const execApp2 = """C:\Users\MyProfile\AppData\Roaming\SomeProgram\bin\SomeProgram.exe"" /systemstartup"
Dim strComputer
strComputer = "."
Dim objShell :Set objShell = CreateObject("WScript.Shell")
Dim objWMIService :Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi")
Dim colItems :Set colItems = objWMIService.ExecQuery("Select * From BatteryStatus Where Voltage > 0")
Dim objItem :Set objItem = Nothing
For Each objItem in colItems
'* Wscript.Echo "On AC Power: " & objItem.PowerOnline
If objItem.PowerOnline = "True" Then objShell.Run execApp1, 0, False
If objItem.PowerOnline = "True" Then objShell.Run execApp2, 0, False
Next
Así que ahora 'thunderbird' y 'someprogram' se ejecutan al inicio SÓLO cuando la computadora portátil está desconectada del cable de alimentación. Para darte más información:
For Each objItem in colItems
Wscript.Echo "Battery: " & objItem.InstanceName
Wscript.Echo "On AC Power: " & objItem.PowerOnline
Wscript.Echo "Battery is Discharging: " & objItem.Discharging
Wscript.Echo "Battery is Charging: " & objItem.Charging
Wscript.Echo "Remaining capacity: " & objItem.RemainingCapacity
Next
le dará más información... lo que resultará en (cuando esté desconectado):
Battery: ACPI\PNP0C0A\1_0
On AC Power: False
Battery is Discharging: True
Battery is Charging: False
Remaining capacity: 41769
Y si luego conectamos la computadora y probamos el script nuevamente, obtenemos información similar a esta:
Battery: ACPI\PNP0C0A\1_0
On AC Power: True
Battery is Discharging: False
Battery is Charging: True
Remaining capacity: 42273
Entonces, en mi guión final, solo verifiqué si la alimentación de CA estaba encendida, sin importar si la batería se estaba cargando o descargando. (fuente:¡Hola, chico de secuencias de comandos! Blog - ¿Cómo puedo saber si una computadora portátil se está quedando sin baterías?