import win32timezone
import win32con
import win32api
import time
class Regedit(object):
"""
创建、修改和读取注册表类
"""
def __init__(self):
self.reg_app_root = win32con.HKEY_LOCAL_MACHINE
self.reg_gpe_root = win32con.HKEY_CURRENT_USER
self.reg_config_path = r"SOFTWARE\EMAS\config"
self.reg_flags = win32con.WRITE_OWNER | win32con.KEY_WOW64_64KEY | win32con.KEY_ALL_ACCESS
self.reg_regedit_path = r"SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\System" # 注册表工具
self.reg_gpedit_path = r"SOFTWARE\POLICIES\MICROSOFT\MMC\{8FC0B734-A0E1-11D1-A7D3-0000F87571E3}" # 组策略工具
self.gpe_d = {'Restrict_Run': 1} # 1禁用
self.reg_d = {'DisableRegistryTools': 2} # 2禁用
self.gpe_e = {'Restrict_Run': 0} # 0启用
self.reg_e = {'DisableRegistryTools': 0} # 0启用
def disablereg(self):
# 禁用注册表方法
try:
for keys, values in self.reg_d.items():
key, _ = win32api.RegCreateKeyEx(self.reg_gpe_root, self.reg_regedit_path, self.reg_flags)
win32api.RegSetValueEx(key, keys, 0, win32con.REG_DWORD, values)
win32api.RegCloseKey(key)
except Exception as e:
return e
def disablegpe(self):
# 禁用组策略
try:
for keys, values in self.gpe_d.items():
key, _ = win32api.RegCreateKeyEx(self.reg_gpe_root, self.reg_gpedit_path, self.reg_flags)
win32api.RegSetValueEx(key, keys, 0, win32con.REG_DWORD, values)
win32api.RegCloseKey(key)
except Exception as e:
return e
def enablereg(self):
# 开启注册表方法
try:
for keys, values in self.reg_e.items():
key, _ = win32api.RegCreateKeyEx(self.reg_gpe_root, self.reg_regedit_path, self.reg_flags)
win32api.RegSetValueEx(key, keys, 0, win32con.REG_DWORD, values)
win32api.RegCloseKey(key)
except Exception as e:
return e
def enablegpe(self):
# 开启组策略方法
try:
for keys, values in self.gpe_e.items():
key, _ = win32api.RegCreateKeyEx(self.reg_gpe_root, self.reg_gpedit_path, self.reg_flags)
win32api.RegSetValueEx(key, keys, 0, win32con.REG_DWORD, values)
win32api.RegCloseKey(key)
except Exception as e:
return e
def sys_sleep(self):
"""
设置睡眠时间为不睡眠
:return:
"""
win32api.ShellExecute(0, 'open', 'cmd',
'/c powercfg /setacvalueindex 381b4222-f694-41f0-9685-ff5bb260df2e 238c9fa8-0aad-41ed-83f4-97be242c8f20 29f6c1db-86da-48c5-9fdb-f2b67b1f44da 0 && exit',
'', 0)
def change_power(self):
"""
修改电源策略为平衡
:return:
"""
win32api.ShellExecute(0, 'open', 'cmd',
'/c %SYSTEMROOT%\System32\powercfg.exe -setactive 381b4222-f694-41f0-9685-ff5bb260df2e && exit',
'', 0)
def check_status(self):
"""
读取注册表信息、键不存在报错
:return:
"""
try:
key = win32api.RegOpenKeyEx(self.reg_gpe_root, self.reg_regedit_path, 0, self.reg_flags)
value_reg = win32api.RegQueryValueEx(key, 'DisableRegistryTools')[0]
win32api.RegCloseKey(key)
key = win32api.RegOpenKeyEx(self.reg_gpe_root, self.reg_gpedit_path, 0, self.reg_flags)
value_gpe = win32api.RegQueryValueEx(key, 'Restrict_Run')[0]
win32api.RegCloseKey(key)
return value_reg, value_gpe
except Exception as e:
return e
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QDesktopWidget, QGridLayout
class Winform(QWidget):
def __init__(self, parent=None):
super(Winform, self).__init__(parent)
self.init_UI()
def init_UI(self):
"""
界面设置
:return:
"""
self.setWindowTitle("小工具集")
# self.resize(600, 300)
# self.setFixedSize(self.width(), self.height())
self.center()
self.gridLayout = QGridLayout()
self.lab1 = QLabel("注册表选项")
self.lab2 = QLabel("注册表编辑器(开启/关闭)")
self.btnro = QPushButton('')
self.btnro.setObjectName('reg')
self.btnro.clicked.connect(self.myevent)
self.lab3 = QLabel("组策略选项")
self.lab4 = QLabel("组策略编辑器(开启/关闭)")
self.btngo = QPushButton('')
self.btngo.setObjectName('gpe')
self.btngo.clicked.connect(self.myevent)
self.lab5 = QLabel("电源策略选项")
self.lab6 = QLabel("电源策略平衡(切换)")
self.btnpow = QPushButton('开启')
self.btnpow.setObjectName('pow')
self.btnpow.clicked.connect(self.myevent)
self.lab7 = QLabel("电源睡眠选项")
self.lab8 = QLabel("电源睡眠禁用(切换)")
self.btnsleep = QPushButton('开启')
self.btnsleep.setObjectName('sleep')
self.btnsleep.clicked.connect(self.myevent)
# 向布局中添加这几个控件
self.gridLayout.addWidget(self.lab1, 0, 0)
self.gridLayout.addWidget(self.lab2, 1, 0)
self.gridLayout.addWidget(self.btnro, 1, 1)
self.gridLayout.addWidget(self.lab3, 2, 0)
self.gridLayout.addWidget(self.lab4, 3, 0)
self.gridLayout.addWidget(self.btngo, 3, 1)
self.gridLayout.addWidget(self.lab5, 0, 2)
self.gridLayout.addWidget(self.lab6, 1, 2)
self.gridLayout.addWidget(self.btnpow, 1, 3)
self.gridLayout.addWidget(self.lab7, 2, 2)
self.gridLayout.addWidget(self.lab8, 3, 2)
self.gridLayout.addWidget(self.btnsleep, 3, 3)
self.check_status()
self.setLayout(self.gridLayout)
def center(self):
# 窗口居中方法
# 获得窗口
qr = self.frameGeometry()
# 获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
# 显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
def check_status(self):
"""
检查状态,并设置按钮文本显示
:return:
"""
value_reg, value_gpe = r.check_status()
if value_reg == 0:
self.btnro.setText('已开启')
if value_gpe == 0:
self.btngo.setText('已启用')
if value_reg == 2:
self.btnro.setText('已禁用')
if value_gpe == 1:
self.btngo.setText('已禁用')
def myevent(self):
"""
事件方法
:return:
"""
button = self.sender()
button_name = button.objectName()
value_reg, value_gpe = r.check_status()
if button_name == "reg":
if value_reg == 0:
r.disablereg()
if value_reg != 0:
r.enablereg()
self.check_status()
if button_name == "gpe":
if value_gpe == 0:
r.disablegpe()
if value_gpe != 0:
r.enablegpe()
self.check_status()
if button_name == "pow":
r.change_power()
self.btnpow.setText('已开启')
if button_name == "sleep":
r.sys_sleep()
self.btnsleep.setText('已开启')
if __name__ == "__main__":
r = Regedit()
app = QApplication(sys.argv)
form = Winform()
form.show()
sys.exit(app.exec_())