Проверьте, подключен ли компьютер к сети переменного тока в командном файле. - PullRequest
7 голосов
/ 09 сентября 2011

Как я могу проверить, подключен ли компьютер к сети переменного тока в командном файле в Windows 7, как on_ac_power в Linux?

Ответы [ 5 ]

8 голосов
/ 09 сентября 2011

Существует прямой способ пакетного файла:

WMIC Path Win32_Battery Get BatteryStatus

Используя это и немного магии find / errorlevel, вы сможете превратить его в условие.

6 голосов
/ 09 сентября 2011

Быстрый Google 1 вытащил

Вот - впечатляющий - C исходный код инструмента:)

#include <windows.h>

int main() 
{
    SYSTEM_POWER_STATUS status;
    GetSystemPowerStatus( &status );
    return status.ACLineStatus;
}

Надеюсь, это поможет


1 http://www.google.com/search?q=windows%20powershell%20battery%20mains%20status

2 примечание: кросс-компиляция в Linux, так как у меня нет Windows. Это работало под вином, хотя, вывод:

$./battery.exe 
255%   ->   
Amount of time remaining is unknown

2 голосов
/ 30 ноября 2017

Вот скрипт, который я использую в нашей среде, прекрасно работает:

wmic path Win32_Battery Get BatteryStatus | find /v "BatteryStatus" | find "1" >nul 2>&1
if "%errorlevel%" == "0" (echo Do whatever you want if on BATTERY) else (echo Do whatever you want if on AC POWER)

Описание:

Из команды wmic изолируйте число от вывода.

Попробуйте найти число «1» в результате. Если все прошло успешно, это означает, что компьютер работает только от батареи. Официальная терминология: «(1) Батарея разряжается».

В противном случае компьютер подключен к сети переменного тока.

2 голосов
/ 07 июня 2016
set OnAC=false
set cmd=WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline
%cmd% | find /i "true" > nul && set OnAC=true
if %OnAC% == true *Do your thing here*
0 голосов
/ 04 июня 2019

Вы действительно можете получить состояние батареи / переменного тока с помощью:

wmic path Win32_Battery Get BatteryStatus

Но, оценка значения состояния - это не просто вопрос "is 1" против "is 1"!

Выезд:

https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-battery

Например, когда AC подключен, вы должны обычно получить "2"

Неизвестно (2)

The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.

Но вы также можете получить набор других значений.

Я вполне уверен, что все это означает "на батарее" /«not on AC»:

Other (1) Low (4) Critical (5)

И все это означает «on AC» / «not on battery»:

Неизвестно (2) Зарядка (6) Зарядка и высокая (7) Зарядка и низкая (8) Зарядка и критическая (9)

Я очень предполагаю, что этотакже указывает «на переменном токе»:

Полностью заряжен (3)

Они кажутся менее определенными ...

Не определено (10)Частично заряженный (11)

Я бы предположил, что «Undefined (10)» означает «на переменном токе» / «без батареи».И «Частично заряженный (11)» должен означать «на аккумуляторе», но, кажется ли, «AC включен» кажется довольно туманным для этого (последнего, нечетного) перечисления.

Кроме того, обычно при отсутствии батареи в аппарате вместо этого возвращается следующее сообщение:

"Нет доступных экземпляров."

Таким образом, для моих целей я определил 4 основных "состояния" для батареи:

  • РАЗРЯД
  • ЗАРЯД
  • FULL
  • NOT PRESENT

В Linux существуют прямые аналоги для запроса к ядру.

В моей логике я считаю первым "No Instance(s) Available." == NOT PRESENTЗатем я использовал следующие оценки для кодов состояния:

DISCHARGING
    Other (1)
    Low (4)
    Critical (5)
CHARGING
    Unknown (2)
    Charging (6)
    Charging and High (7)
    Charging and Low (8)
    Charging and Critical (9)
    Partially Charged (11)
FULL
    Fully Charged (3)
NOT PRESENT
    Undefined (10)

Кроме того, я хотел логическую проверку для «isBatteryPresent» и «isAcPower».Я опирался на оценку своего состояния, а затем подумал:

isBatteryPresent = state != NOT PRESENT 
isAcPower = state != DISCHARGING
...