# -*- coding : utf-8 -*-
# @author : Azar
import os
import sys
import wmi
import re
from PyQt5 import QtCore, QtGui, uic
from PyQt5.QtWidgets import QWidget, QApplication, QMessageBox, QInputDialog,QListWidget
IP_Pattern = re.compile('^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')
def get_dnslist() -> list[str]:
# 从文件中读取DNS列表
l = []
with open('dns_list', 'r')as file:
for line in file:
l.append(line[:-1] if line.endswith('\n') else line)
return l
def isIP(text:str) -> bool:
# 使用正则表达式检测IP格式
if re.match(IP_Pattern,text):
return True
else:
return False
class Window(QWidget):
def __init__(self) -> None:
super(Window, self).__init__(None)
uic.loadUi('ui.ui', self)
# 获取 设置实例 以及初始DNS、当前选定DNS、以及文件中的DNS列表
self.config = wmiService.Win32_NetworkAdapterConfiguration(IPEnabled=True)[0]
self.pre_dns = self.get_dnsServers()
# 检测DNSServer的数量
if len(self.pre_dns) == 1:
self.pre_dns = (self.pre_dns[0],self.pre_dns[0])
print('初始DNS列表:',self.pre_dns)
self.cur_dns = list(self.pre_dns)
self.dns_list = get_dnslist()
# self.dns_widget = QListWidget()
# 标签显示电脑配置信息
self.dns_adapter.setText(self.get_adapterName())
self.dns_main.setText(self.pre_dns[0])
self.dns_second.setText(self.pre_dns[1] if len(self.pre_dns)==1 else self.pre_dns[0])
# 显示DNS列表
self.dns_widget.addItems(self.dns_list)
# 绑定按键事件
self.btn_add.clicked.connect(self.list_add)
self.btn_del.clicked.connect(self.list_del)
self.btn_back.clicked.connect(self.back)
self.btn_main.clicked.connect(self.set_main)
self.btn_second.clicked.connect(self.set_second)
# self.dns_widget = QListWidget()
def set_main(self):
item = self.dns_widget.selectedItems()[0].text()
self.cur_dns[0] = item
self.set_dnsServers(self.cur_dns)
self.dns_main.setText(item)
def set_second(self):
item = self.dns_widget.selectedItems()[0].text()
self.cur_dns[1] = item
self.set_dnsServers(self.cur_dns)
self.dns_second.setText(item)
def list_add(self):
# 添加IP列表
ip, flag = QInputDialog.getText(self, '请输入DNS服务器地址', 'IP:')
if flag and isIP(ip):
print('检测到合格的IP地址', ip)
self.dns_list.append(ip)
self.dns_widget.addItem(ip)
def list_del(self):
item = self.dns_widget.selectedItems()[0].text()
self.dns_list.remove(item)
self.dns_widget.takeItem(self.dns_widget.currentRow())
def back(self):
# 恢复DNS设置初始状态
self.dns_main.setText(self.pre_dns[0])
self.dns_second.setText(self.pre_dns[1])
self.set_dnsServers(self.pre_dns)
# 恢复DNS列表文件初始状态
with open('dns_list', 'w') as file1:
with open('dns_list_base', 'r') as file2:
file1.write(file2.read())
self.dns_list = get_dnslist()
# 更新列表控件
self.dns_widget.clear()
self.dns_widget.addItems(self.dns_list)
def get_adapterName(self) -> str:
# 获取默认适配器
return self.config.Description
def get_dnsServers(self) -> tuple[str]:
# 获取当前DNS服务器IP地址
return self.config.DNSServerSearchOrder
def set_dnsServers(self,dns:list[str]) -> bool:
print('更改DNS:', dns)
flag = True
r = self.config.SetDNSServerSearchOrder(DNSServerSearchOrder=dns)
if r[0] == 0:
print('成功设置DNS')
elif r[0] == 1:
print('成功设置DNS')
self.show_rebootBox()
else:
print('设置DNS失败')
flag = False
return flag
def show_rebootBox(self):
# 显示重启对话框
# QMessageBox.information(self,'设置完成', "DNS设置完成,需重启")
box = QMessageBox(self)
box.setWindowTitle('成功')
box.setText('DNS设置完毕,需要重启电脑,是否立即重启?')
box.setStandardButtons(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
reboot = box.button(QMessageBox.StandardButton.Yes)
reboot.setText('重启')
later = box.button(QMessageBox.StandardButton.No)
later.setText('稍后')
box.exec_()
if box.clickedButton() == reboot:
print('重启')
self.save()
os.system('shutdown /r')
def save(self):
with open('dns_list', 'w') as file:
file.write('\n'.join(self.dns_list))
print('文件保存完毕')
def closeEvent(self, event: QtGui.QCloseEvent):
self.save()
print('程序退出,文件已保存')
app.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
wmiService = wmi.WMI()
myWindow = Window()
myWindow.show()
app.exec_()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt框架和Windows系统的DNS修改器.zip (7个子文件)
cm
2.0
dns_list_base 201B
dns_list 201B
editor.py 5KB
程序框架.emmx 21KB
ui.ui 4KB
.vscode
launch.json 694B
1.0
editor.py 588B
共 7 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python部署fastsam的tensorrt模型源码.zip
- 【JavaScript】基于JSP的酒店客房管理系统源【源码+lw+部署文档+讲解】
- 综合电路设计-8赛道多功能运动秒表(vivado实现代码)
- java学习心得4000字.doc
- CarControl.pcf
- opencv-基于c++实现的opencv图像处理算法之gamma校正.zip
- java实习周记25篇.doc
- MI4450-VB一款SOP8封装N-Channel场效应MOS管
- opencv-基于c++实现的opencv图像处理算法之灰度变换算法.zip
- 实现用于Landmark检测+Robot跟踪的SLAM定位导航算法源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功