Python+TK 添加删除开机启动项

查看 90|回复 9
作者:dfydfydfy896   
网上想找个几十K绿色软件没找到,于是想借助GPT自己写一个吧。
py代码是很少,但打包后也要10M了,聊胜于无,胜在干净。
之前的版本有个路径斜杠符号反了的小错误,需要修改下。
        file_path = os.path.normpath(file_path)  # 规范化路径
        filename = os.path.basename(file_path)
[Python] 纯文本查看 复制代码import tkinter as tk
from tkinter import filedialog, messagebox
import winreg
import os
# 获取当前用户的启动项注册表路径
startup_reg_path = r"Software\Microsoft\Windows\CurrentVersion\Run"
startup_reg_key = winreg.HKEY_CURRENT_USER
def get_startup_items():
    try:
        key = winreg.OpenKey(startup_reg_key, startup_reg_path, 0, winreg.KEY_READ)
        startup_items = []
        index = 0
        while True:
            try:
                name, value, _ = winreg.EnumValue(key, index)
                startup_items.append(name)  # 存储启动项的名称而非值
                index += 1
            except OSError:
                break
        winreg.CloseKey(key)
        return startup_items
    except FileNotFoundError:
        return []
def add_startup_item(file_path):
    try:
        file_path = os.path.normpath(file_path)  # 规范化路径
        filename = os.path.basename(file_path)
        key = winreg.OpenKey(startup_reg_key, startup_reg_path, 0, winreg.KEY_WRITE)
        winreg.SetValueEx(key, filename, 0, winreg.REG_SZ, file_path)
        winreg.CloseKey(key)
        messagebox.showinfo("添加启动项", f"已成功添加启动项: {filename}")
    except Exception as e:
        messagebox.showerror("添加启动项失败", f"添加启动项时出错: {str(e)}")
def remove_startup_item(item_name):
    try:
        key = winreg.OpenKey(startup_reg_key, startup_reg_path, 0, winreg.KEY_WRITE)
        winreg.DeleteValue(key, item_name)
        winreg.CloseKey(key)
        messagebox.showinfo("删除启动项", f"已成功删除启动项: {item_name}")
    except FileNotFoundError:
        messagebox.showwarning("删除启动项", f"启动项 '{item_name}' 不存在")
    except Exception as e:
        messagebox.showerror("删除启动项失败", f"删除启动项时出错: {str(e)}")
def select_file():
    file_path = filedialog.askopenfilename(filetypes=[("Executable files", "*.exe")])
    if file_path:
        add_startup_item(file_path)
        update_listbox()
def update_listbox():
    startup_items = get_startup_items()
    listbox.delete(0, tk.END)
    for item in startup_items:
        listbox.insert(tk.END, item)
def refresh_listbox():
    update_listbox()
def delete_selected_item():
    selected_index = listbox.curselection()
    if selected_index:
        selected_item = listbox.get(selected_index)
        remove_startup_item(selected_item)
        update_listbox()
# 创建Tkinter界面
root = tk.Tk()
root.title("启动项管理程序")
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
add_button = tk.Button(frame_top, text="添加启动项", command=select_file)
add_button.pack(side=tk.LEFT, padx=10)
remove_button = tk.Button(frame_top, text="删除选中启动项", command=delete_selected_item)
remove_button.pack(side=tk.LEFT)
refresh_button = tk.Button(frame_top, text="手动刷新", command=refresh_listbox)
refresh_button.pack(side=tk.LEFT, padx=10)
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=20)
listbox = tk.Listbox(frame_bottom, width=50)
listbox.pack()
update_listbox()
root.mainloop()
打包成单一exe
pyinstaller --onefile --noconsole --paths=C:\python\tcl\tcl8,C:\python\tcl\tcl8.6,C:\python\tcl\tk8.6 show.py


图片.png (25.79 KB, 下载次数: 0)
下载附件
2024-8-6 15:00 上传

启动项, 路径

long8586   


kkk013 发表于 2024-8-6 17:08
为啥子,不直接在任务管理器的启动栏里操作
还是感谢分享

这个吧,不同的系统,不太一样,关键是对系统设置不太熟练的人来说,取消一个启动项真的很难得
JSX   

仰望大佬
kkk013   

为啥子,不直接在任务管理器的启动栏里操作
还是感谢分享
jun269   

python的强大啊
lipingtao   

学习啦,不错
sztoplon   

感谢分享,学习一下
kangta520   

谢谢分享,我用customtkinter也写了一个
A582168411   

谢谢分享
Mfjhkj   

感谢分享,正好学习一下新的技术
您需要登录后才可以回帖 登录 | 立即注册

返回顶部