173 lines
4.9 KiB
Python
173 lines
4.9 KiB
Python
import tkinter as tk
|
|
from tkinter import simpledialog, messagebox
|
|
import json
|
|
import os
|
|
import ctypes
|
|
import winreg
|
|
|
|
CONFIG_FILE = "config.json"
|
|
|
|
INTERNET_SETTINGS = winreg.OpenKey(
|
|
winreg.HKEY_CURRENT_USER,
|
|
r"Software\Microsoft\Windows\CurrentVersion\Internet Settings",
|
|
0,
|
|
winreg.KEY_ALL_ACCESS,
|
|
)
|
|
|
|
|
|
def load_config():
|
|
if os.path.exists(CONFIG_FILE):
|
|
with open(CONFIG_FILE, "r") as f:
|
|
return json.load(f)
|
|
else:
|
|
return {"proxies": [], "current_proxy": get_system_proxy()}
|
|
|
|
|
|
def save_config(config):
|
|
with open(CONFIG_FILE, "w") as f:
|
|
json.dump(config, f, indent=4)
|
|
|
|
|
|
def get_system_proxy():
|
|
try:
|
|
proxy_server, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, "ProxyServer")
|
|
proxy_enable, reg_type = winreg.QueryValueEx(INTERNET_SETTINGS, "ProxyEnable")
|
|
if proxy_enable:
|
|
return proxy_server
|
|
else:
|
|
return "无代理"
|
|
except FileNotFoundError:
|
|
return "无代理"
|
|
|
|
|
|
def set_system_proxy(proxy):
|
|
try:
|
|
winreg.SetValueEx(INTERNET_SETTINGS, "ProxyEnable", 0, winreg.REG_DWORD, 1)
|
|
winreg.SetValueEx(INTERNET_SETTINGS, "ProxyServer", 0, winreg.REG_SZ, proxy)
|
|
refresh_internet_settings()
|
|
config["current_proxy"] = proxy
|
|
save_config(config)
|
|
messagebox.showinfo("代理设置", f"代理已切换到 {proxy}")
|
|
except Exception as e:
|
|
messagebox.showerror("错误", f"无法设置代理: {e}")
|
|
|
|
|
|
def disable_proxy():
|
|
try:
|
|
winreg.SetValueEx(INTERNET_SETTINGS, "ProxyEnable", 0, winreg.REG_DWORD, 0)
|
|
refresh_internet_settings()
|
|
config["current_proxy"] = "无代理"
|
|
save_config(config)
|
|
messagebox.showinfo("代理设置", "代理已禁用")
|
|
except Exception as e:
|
|
messagebox.showerror("错误", f"无法禁用代理: {e}")
|
|
|
|
|
|
def refresh_internet_settings():
|
|
internet_set_option = ctypes.windll.Wininet.InternetSetOptionW
|
|
internet_set_option(0, 37, 0, 0)
|
|
internet_set_option(0, 39, 0, 0)
|
|
|
|
|
|
def switch_proxy():
|
|
selected_proxy = proxy_listbox.get(tk.ACTIVE)
|
|
if selected_proxy == "移除代理":
|
|
disable_proxy()
|
|
else:
|
|
set_system_proxy(selected_proxy)
|
|
|
|
|
|
def add_proxy():
|
|
new_proxy = simpledialog.askstring("添加代理", "输入新的代理地址 (格式: host:port)")
|
|
if new_proxy:
|
|
config["proxies"].append(new_proxy)
|
|
update_proxy_listbox()
|
|
save_config(config)
|
|
|
|
|
|
def delete_proxy():
|
|
selected_proxy = proxy_listbox.get(tk.ACTIVE)
|
|
if selected_proxy in config["proxies"]:
|
|
config["proxies"].remove(selected_proxy)
|
|
update_proxy_listbox()
|
|
save_config(config)
|
|
|
|
|
|
def edit_proxy():
|
|
selected_proxy = proxy_listbox.get(tk.ACTIVE)
|
|
if selected_proxy:
|
|
new_proxy = simpledialog.askstring(
|
|
"编辑代理", "编辑代理地址", initialvalue=selected_proxy
|
|
)
|
|
if new_proxy:
|
|
index = config["proxies"].index(selected_proxy)
|
|
config["proxies"][index] = new_proxy
|
|
update_proxy_listbox()
|
|
save_config(config)
|
|
|
|
|
|
def update_proxy_listbox():
|
|
proxy_listbox.delete(0, tk.END)
|
|
for proxy in config["proxies"]:
|
|
proxy_listbox.insert(tk.END, proxy)
|
|
proxy_listbox.insert(tk.END, "移除代理") # 添加禁用代理的选项
|
|
|
|
|
|
def view_current_proxy():
|
|
current_proxy = get_system_proxy()
|
|
messagebox.showinfo("当前代理", f"当前代理: {current_proxy}")
|
|
|
|
|
|
# 读取配置
|
|
config = load_config()
|
|
|
|
app = tk.Tk()
|
|
app.title("HttpProxySwitcher")
|
|
|
|
frame = tk.Frame(app)
|
|
frame.pack(pady=10)
|
|
|
|
proxy_listbox = tk.Listbox(frame, selectmode=tk.SINGLE, width=40)
|
|
proxy_listbox.pack(side=tk.LEFT, padx=10)
|
|
|
|
scrollbar = tk.Scrollbar(frame)
|
|
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
|
|
proxy_listbox.config(yscrollcommand=scrollbar.set)
|
|
scrollbar.config(command=proxy_listbox.yview)
|
|
|
|
button_frame = tk.Frame(app)
|
|
button_frame.pack(pady=10)
|
|
|
|
view_button = tk.Button(button_frame, text="查看当前代理", command=view_current_proxy)
|
|
view_button.pack(side=tk.LEFT, padx=5)
|
|
|
|
add_button = tk.Button(button_frame, text="添加代理", command=add_proxy)
|
|
add_button.pack(side=tk.LEFT, padx=5)
|
|
|
|
edit_button = tk.Button(button_frame, text="编辑代理", command=edit_proxy)
|
|
edit_button.pack(side=tk.LEFT, padx=5)
|
|
|
|
delete_button = tk.Button(button_frame, text="删除代理", command=delete_proxy)
|
|
delete_button.pack(side=tk.LEFT, padx=5)
|
|
|
|
switch_button = tk.Button(app, text="切换代理", command=switch_proxy)
|
|
switch_button.pack(pady=10)
|
|
|
|
info_label = tk.Label(
|
|
app,
|
|
text="HttpProxySwitcher v1.0 2024/07/07\nCopyright 2024 earthjasonlin\n保留所有权利。\n本程序仅作为交流学习使用",
|
|
justify="center",
|
|
anchor="center",
|
|
)
|
|
info_label.pack(pady=10, padx=20, fill="x")
|
|
|
|
# 自动调整窗口大小
|
|
app.update_idletasks()
|
|
app.minsize(app.winfo_reqwidth(), app.winfo_reqheight())
|
|
app.resizable(False, False)
|
|
|
|
# 更新列表框
|
|
update_proxy_listbox()
|
|
|
|
app.mainloop()
|