dfydfydfy896 发表于 2024-8-6 15:01

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

本帖最后由 dfydfydfy896 于 2024-8-6 22:10 编辑

网上想找个几十K绿色软件没找到,于是想借助GPT自己写一个吧。
py代码是很少,但打包后也要10M了,聊胜于无,胜在干净。

之前的版本有个路径斜杠符号反了的小错误,需要修改下。
      file_path = os.path.normpath(file_path)# 规范化路径
      filename = os.path.basename(file_path)

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



long8586 发表于 2024-8-6 20:53

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

还是感谢分享

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

JSX 发表于 2024-8-6 17:06

仰望大佬{:1_893:}

kkk013 发表于 2024-8-6 17:08

为啥子,不直接在任务管理器的启动栏里操作

还是感谢分享

jun269 发表于 2024-8-6 17:32

python的强大啊

lipingtao 发表于 2024-8-6 17:49

学习啦,不错

sztoplon 发表于 2024-8-6 18:18

感谢分享,学习一下

kangta520 发表于 2024-8-6 18:44

本帖最后由 kangta520 于 2024-8-6 18:46 编辑

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

Mfjhkj 发表于 2024-8-6 19:45

感谢分享,正好学习一下新的技术

侃遍天下无二人 发表于 2024-8-6 23:57

直接用火绒的启动项管理就行了,你这个都快有人家火绒一半的体积了
页: [1] 2
查看完整版本: Python+TK 添加删除开机启动项