commit ca61d797d8efb33e01404978a2bc3220c5ba5a7f Author: Zichao Lin Date: Sun Jul 7 09:40:16 2024 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dff1709 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +output/ +config.json \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..88321b3 --- /dev/null +++ b/main.py @@ -0,0 +1,161 @@ +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("代理管理器") + +frame = tk.Frame(app) +frame.pack(pady=10) + +proxy_listbox = tk.Listbox(frame, selectmode=tk.SINGLE, width=50) +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) + +# 更新列表框 +update_proxy_listbox() + +app.mainloop()