Я использую Windows 8.1 (но это не имеет значения) на ноутбуке, и мне было интересно, можно ли изменить процесс запуска таким образом, чтобы:

Некоторые программы запускаются ТОЛЬКО когда вы подключены (питание), а другие программы ТОЛЬКО запускаются, когда вы НЕ подключены.

Возможно ли это ... и если да, то как?

2 ответа2

0

Спасибо Уэсу Сайеду за то, что он указал мне правильное направление, вот окончательный результат .. Однако обратите внимание, что программы могут работать не так, как на вашем компьютере, так как я использовал их в качестве примера, и любой добавленный синтаксис может не иметь ничего общего с программами, как вы это знаете ...

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

Так что теперь «thunderbird» и «someprogram» запускаются при запуске ТОЛЬКО, когда ноутбук отключен от кабеля питания. Чтобы дать вам больше информации:

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

даст вам больше информации ... в результате (когда отключено):

Battery: ACPI\PNP0C0A\1_0
On AC Power: False
Battery is Discharging: True
Battery is Charging: False
Remaining capacity: 41769

И если мы затем подключим компьютер и попробуем скрипт снова, мы получим информацию, похожую на эту:

Battery: ACPI\PNP0C0A\1_0
On AC Power: True
Battery is Discharging: False
Battery is Charging: True
Remaining capacity: 42273

Таким образом, в моем последнем сценарии я только проверял, было ли включено питание переменного тока, независимо от того, заряжалась ли батарея или разряжалась. (источник: http://blogs.technet.com/b/heyscriptingguy/archive/2007/04/09/how-can-i-tell-whether-a-laptop-computer-is-running-off-batteries.aspx)

0

Я не знаю, есть ли какие-либо сторонние утилиты для этого, но в Windows есть встроенные механизмы для мониторинга состояния батареи. Хорошей новостью является то, что она делает доступной для вас массу информации о вашей батарее. Плохая новость заключается в том, что вам совсем не легко его использовать.

Отличный способ выполнить то, что вы хотите, это использовать скрипт для запуска ваших приложений. Я разбил пример сценария ниже. Просто скопируйте / вставьте его в Блокнот, настройте его по своему усмотрению , а затем сохраните как файл с расширением .vbs. Как только у вас все заработало, вы можете добавить его в свою группу запуска или что-то еще.

ПРИМЕЧАНИЕ. Этот сценарий - всего лишь то, что я написал за десять минут. Это должно помочь вам начать, но я не проверил это полностью. Значения, возвращаемые BatteryStatus, описаны на этой странице MSDN. Возможно, вам придется поэкспериментировать, чтобы узнать, какое значение сообщается при каких обстоятельствах.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .