使用Python编辑Windows 8电源选项
问题:
每次我重启电脑时,Windows 8的电源设置都会恢复到默认状态,这样我的电脑在一个小时后就会进入睡眠模式。我不想让我的电脑随便进入睡眠状态,除非我自己决定……我必须去控制面板 > 系统和安全 > 电源选项 > 编辑计划设置,手动把电脑进入睡眠的设置改成“从不”。
我想要的:
一个Python脚本,用来修改Windows 8的电源选项。 我会设置这个脚本在每次重启时自动运行。
我找过可以修改Windows设置的Python模块,但没找到合适的。我之前玩过win32api来控制鼠标,但在它的文档里找不到电源选项的相关内容。
朱利乌斯·凯撒提到的使用powercfg命令行选项的建议非常好。
这是我最终使用的简单脚本:
import subprocess
subprocess.call("powercfg -change -standby-timeout-ac 0")
这里的 -standby-timeout-ac
选项设置为零,这样我的电脑就永远不会进入睡眠状态。
3 个回答
0
我知道这个消息有点晚了,但最近发布了一个新的模块,叫做“powerplan”。
pip install powerplan
接下来导入这个模块:
import powerplan
要获取你当前的电源计划方案,可以使用:
print(powerplan.get_current_scheme_name())
print(powerplan.get_current_scheme_guid())
要更改你的电源计划方案,可以使用:
powerplan.change_current_scheme_to_powersaver()
powerplan.change_current_scheme_to_balanced()
powerplan.change_current_scheme_to_high()
2
我有一个解决方案,主要使用了win32com.client这个库。
这个方案在Windows 10上可以正常运行。
import win32com.client
class PowerPlan(Computer):
def __init__(self, mk="//./root/cimv2/power"):
super(PowerPlan, self).__init__(mk)
self.power_info = None
self.power_plan = None
def get_active_power_plan(self) -> str:
power_plans = self.wmi.InstancesOf("Win32_powerplan")
for plan in power_plans:
if plan.IsActive:
match = re.search(r'\{(.+?)\}', plan.InstanceID)
self.power_plan = plan
return match.group(1)
def get_power_plan_index(self, guid_id):
unknown_list = []
current_power_plan_index = {"AC": {}, "DC": {}}
power_index = self.wmi.InstancesOf("Win32_powersettingdataindex")
for power_value in power_index:
# print(type(power_value))
# print(dir(power_value))
match = re.search(guid_id, power_value.InstanceID)
if match is not None:
match = re.search(guid_id + r'\}\\(\w{2})\\\{(.+?)\}', power_value.InstanceID)
power_mode = match.group(1)
power_tag = match.group(2)
try:
power_word = PowerPlanGUID(power_tag).name
except Exception as Err:
# print("Unknown Tag GUID: " + power_tag)
if power_tag not in unknown_list:
unknown_list.append(power_tag)
continue
# power_info = {power_word : power_value.settingindexvalue}
current_power_plan_index[power_mode][power_word] = power_value.settingindexvalue
self.power_info = current_power_plan_index
self._json_dump(self.power_info)
def set_power_plan_value(self, act_plan_guid, power_mode, power_plan_value_guid, value):
power_index = self.wmi.InstancesOf("Win32_powersettingdataindex")
for power_setting in power_index:
match = re.search(act_plan_guid + r'\}\\' + power_mode + r'\\\{' + power_plan_value_guid + r'\}',
power_setting.InstanceID)
# match = re.search(power_plan_value_guid, power_setting.InstanceID)
if match is not None:
print(power_setting.InstanceID)
print(power_setting.settingindexvalue)
# Properties_
power_setting.Properties_("SettingIndexValue").Value = value
# How to make the changed value work
power_setting.Put_()
act_method = self.power_plan.Methods_("Activate")
self.power_plan.ExecMethod_("Activate")
else:
pass
8
我觉得你应该了解一下 powercfg 这个Windows命令,然后可以用Python的 subprocess.call
来设置你想要的东西,比如:
import subprocess
subprocess.call("powercfg -change -monitor-timeout-ac 666")
这个命令应该挺容易理解的:把 '-ac' 改成 '-dc' 就是为了设置电池,数值是以分钟为单位的,零代表无限时间,这一点很明显。