Я использую Windows 8.1 (но это не должно иметь значения) на ноутбуке и хотел бы узнать, можно ли изменить процесс запуска таким образом, чтобы:
Некоторые программы запускаются ТОЛЬКО при подключении к электросети (питанию), а другие программы запускаются ТОЛЬКО при ОТСУТСТВИИ подключения к электросети.
Возможно ли это? И если да, то как?
решение1
Я не знаю, есть ли какие-либо сторонние утилиты для этого, но в 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
решение2
Спасибо Уэсу Саиду за то, что он указал мне правильное направление. Вот конечный результат. Однако учтите, что программы могут работать не так, как на вашем компьютере, поскольку я использовал их в качестве примера, и любой добавленный синтаксис может не иметь ничего общего с программами, которые вы знаете...
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
Поэтому в моем окончательном сценарии я проверял только то, включено ли питание переменного тока, независимо от того, заряжалась или разряжалась батарея. (источник:Привет, Скриптер! Блог - Как узнать, разряжается ли аккумулятор ноутбука?