Метод условного управления питанием ноутбука в Windows 11

Метод условного управления питанием ноутбука в Windows 11

Я хотел бы установить условные правила управления питанием в зависимости от уровня заряда аккумулятора.

В настоящее время у меня установлены соответствующие правила для включенного питания и работы от батареи. В дополнение к этому я хотел бы, чтобы настройки включения питания применялись, если уровень заряда батареи превышает 75%. Цель этого — остановить применение моих агрессивных настроек сна, когда батарея имеет хороший заряд. Я еще не придумал, как это сделать, но я подумал, что, возможно, скрипт на Python мог бы изменить настройки питания от батареи в зависимости от уровня заряда. Для этого мне пришлось бы установить Python и запустить скрипт как службу. Я не уверен, но подозреваю, что скрипту могут потребоваться права администратора.

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

Существует ли способ настройки параметров электропитания в системах Windows на основе процента заряда аккумулятора?

решение1

В итоге я написал скрипт на python, чтобы управлять этим. Он требует только python, не требует прав администратора и не требует дополнительных модулей.

import subprocess
import time
import datetime

battery_watermark = 75
sleep_on_battery_mins = 20

def set_standby_timeout_dc(mins):
    return subprocess.call("powercfg -change -standby-timeout-dc " +str(mins))

def battery_precentage():
    return int(subprocess.run(["WMIC", "PATH", "Win32_Battery", "Get", "EstimatedChargeRemaining"], capture_output=True).stdout.decode().split("\n")[1][:3].strip())

def on_battery():
    #BatteryStatus returns 2 when connected to AC.
    charging_status = int(subprocess.run(["WMIC", "PATH", "Win32_Battery", "Get", "BatteryStatus"], capture_output=True).stdout.decode().split("\n")[1].strip())
    if charging_status == 2:
        return False
    else:
        return True

print("Windows Power settings changer")
starttime = time.time()
while True:
    if (battery_precentage() > battery_watermark) and on_battery():
            print(str(datetime.datetime.now()) + ": Setting on-battery standby timeout to 0, battery at " + str(battery_precentage()) + "%, on battery: " + str(on_battery()))
            set_standby_timeout_dc(0)
    else:
        print(str(datetime.datetime.now()) + ": Setting on-battery standby timeout to " + str(sleep_on_battery_mins) + ", battery at " + str(battery_precentage()) + "%, on battery: " + str(on_battery()))
        set_standby_timeout_dc(sleep_on_battery_mins)
    time.sleep(((sleep_on_battery_mins/2)-1)*60 - ((time.time() - starttime) %60))

Связанный контент