cómo iniciar elementos solo cuando la computadora portátil está conectada

cómo iniciar elementos solo cuando la computadora portátil está conectada

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?

información relacionada