炉石战棋一键断网小工具(python)

通过pyqt5编写的界面,通过os对防火墙入站规则进行开启与关闭

注意事项:

1、对程序路径进行符号转换,否则失效

2、关闭相关杀毒软件测试

3、以管理员身份运行,打包文件exe时同理开启管理员模式

4、打包工具:auto-py-to-exe(附打包配置)

5、因窗口图标ico文件为路径文件,需采用打包路径映射,并添加文件目录

6、python3.8.8版本32位实现,其他版本自行测试

 

'''
源代码
https://pan.baidu.com/s/11Xp1tiLAn9fjlbEIGFsGjw 
eucz

exe文件
https://pan.baidu.com/s/1bBFefSKvzN_3r-9IyEQIQA 
507q


'''
'''操作层面'''

import os

# 断网
def off():
    os.system('netsh advfirewall firewall set rule name="hh_ldp" new enable=yes')

# 恢复网络
def reconnection():
    os.system('netsh advfirewall firewall set rule name="hh_ldp" new enable=no')


# 添加路径,生成程序
def add(path):
    os.system(r'netsh advfirewall firewall add rule name="hh_ldp"  dir=out'
              r'  program="{}"  action=block'.format(path))



'''UI控制层'''
import os
import time
import public
from Application.View.mainView import mainView
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QMessageBox,QFileDialog
from Common.operation import *

class mainController:
    def __init__(self):
        '''主界面控制层 类 初始化'''
        # 配置文件路径
        # self.ini = public.path + '\\Resource\\static\\config\\config.ini'
        # self.ini = public.path + '\\config.ini'
        self.ini = 'C:\\config.ini'
        # print(self.ini)
        # 创建界面对象
        self.mainView = mainView()
        # 槽函数 信号 初始化
        self.event_init()
        # 加载配置
        self.load_setting()
        # 实例化显示
        self.mainView.show()

    # 槽函数 信号 初始化
    def event_init(self):
        '''槽函数 信号 初始化'''
        # 一键断联
        self.mainView.StartButton.clicked.connect(self.Start)
        # 断网按钮
        self.mainView.BreakButton.clicked.connect(self.Break)
        # 联网按钮
        self.mainView.LinkButton.clicked.connect(self.Link)
        # 程序生成
        self.mainView.GenerateButton.clicked.connect(self.Generate)
        # 保存配置
        self.mainView.SaveButton.clicked.connect(self.save_setting)
        # 选择路径
        self.mainView.ChooseButton.clicked.connect(self.load_path)


    # 保存界面配置
    def save_setting(self):
        def show_msg():
            QMessageBox.information(self.mainView,'温馨提示', '配置保存成功')
        '''保存界面配置'''
        settings = QSettings(self.ini, QSettings.IniFormat)
        # 设置 格式
        settings.setIniCodec('utf8')
        # 获取参数
        path = self.mainView.lineEdit_path.text()
        delay_time = self.mainView.lineEdit_time.text()
        # 配置 字典
        setting_dict = {
            'path':path,
            'delay_time':delay_time,
        }
        # 循环遍历 保存配置
        for key, val in setting_dict.items():
            settings.setValue(key, val)

        show_msg()

    def load_setting(self):
        '''加载配置'''
        # 判断文件路径是否存在
        if os.path.exists(self.ini):
            # 获取配置文件 配置内容
            settings = QSettings(self.ini,QSettings.IniFormat)
            # 设置 格式
            settings.setIniCodec('utf8')
            # 读取配置
            path = settings.value('path')
            delay_time = settings.value('delay_time')
            # 界面显示
            self.mainView.lineEdit_path.setText(path)
            self.mainView.lineEdit_time.setText(delay_time)

    def load_path(self):
        '''选择并加载文件'''
        file_path, file_type = QFileDialog.getOpenFileName(self.mainView,'请选择程序路径','E:/','All Files (*);;EXE Files (*.exe)')
        if file_path:
            if '.exe' in file_path:
                self.mainView.lineEdit_path.setText(file_path)


    def Start(self):
        def show_msg():
            QMessageBox.warning(self.mainView, '警告', '延时时间错误')
        def show_msg_2():
            QMessageBox.warning(self.mainView, '警告', '延时时间不能为负数')
        def show_msg_3():
            QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
        # 截图读数-数字检测
        def Is_number(s):
            try:
                float(s)
                return True
            except ValueError:
                pass
            try:
                import unicodedata
                unicodedata.numeric(s)
                return True
            except (TypeError, ValueError):
                pass
            return False
        if public.Generate_Sign == True:
            if Is_number(self.mainView.lineEdit_time.text()) == True:
                if int(self.mainView.lineEdit_time.text()) >= 0:
                    off()
                    time.sleep(int(self.mainView.lineEdit_time.text()))
                    reconnection()
                else:
                    show_msg_2()
            else:
                show_msg()
        else:
            show_msg_3()


    def Break(self):
        def show_msg_3():
            QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
        if public.Generate_Sign == True:
            off()
        else:
            show_msg_3()

    def Link(self):
        def show_msg_3():
            QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
        if public.Generate_Sign == True:
            reconnection()
        else:
            show_msg_3()


    def Generate(self):
        def show_msg():
            QMessageBox.information(self.mainView,'温馨提示', '程序生成完成')
        def show_msg_2():
            QMessageBox.warning(self.mainView, '警告', '程序路径错误')
        if '.exe' in self.mainView.lineEdit_path.text():
            add(self.mainView.lineEdit_path.text().replace('/', '\\'))
            public.Generate_Sign = True
            show_msg()
        else:
            show_msg_2()

'''UI视图层'''
from public import path
from Resource.ui.mainUI import mainUI
from PyQt5.QtWidgets import QWidget
from PyQt5 import QtGui

class mainView(mainUI,QWidget):
    def __init__(self):
        super(mainView,self).__init__()
        self.Icon_path = path + '\\Resource\\static\\images\\Icon\\哆啦A梦.ico'
        self.setupUi(self)
        self.retranslateUi(self)
        self.ui_init()

    def ui_init(self):
        '''自定义UI'''
        # 设置窗口图标
        icon = QtGui.QIcon(self.Icon_path)
        self.setWindowIcon(icon)



'''程序入口'''
import sys
import public
from PyQt5.QtWidgets import QApplication
from Application.Controller.mainController import mainController
from PyQt5.Qt import QFont,Qt

if __name__ == '__main__':
    # 分辨率自适应
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)  # Qt从5.6.0开始,支持High-DPI
    app = QApplication(sys.argv)
    # 重置字体大小
    font = QFont("黑体")
    pointsize = font.pointSize()
    font.setPixelSize(pointsize)
    app.setFont(font)

    # 从控制层启动 主界面
    first_ui = mainController()

    sys.exit(app.exec_())

参考:https://blog.csdn.net/qq_42293487/article/details/110423382

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值