本文代码大部分参看了博客:python程序开机自启动_python打包exe开机自动启动的实例(windows),侵删~
一、通过修改注册表,实现QQ程序开机后自动运行或不自动运行
关于注册表,可以先看看这篇教程3分钟掌握「注册表」,从此再也不怕误操作! (360doc.com)。
(1)首先Windows +R ,调出“运行程序”。
(2)输入regedit ,进入注册表。
(3)进入到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 路径下。
PS:Run 键值代表着开机启动项,也就是说在这个项下的键值会随着开机启动。
(4)右键,选择“新建”,“字符串值”,命名为QQ ,双击,进行赋值。
可以通过右键QQ的快捷方式找到他的执行文件的路径,如图:
复制目标对应的路径,赋值给注册表。
(5)点击“确定“,关闭注册表,重启电脑之后,QQ就会开机自启动了。
(6)如果想让QQ不开机自启动,只要找到刚刚添加的值,右键删除,确定即可。
二、编写一个桌面程序或脚本程序,通过读写注册表实现QQ程序开机后自动运行
开发环境:Python3.8 + PyCharm
import PySimpleGUI as simpleGui
import win32api
import win32con
def AutoStart():#设置TIM自动启动
name = 'TIM' # 要添加的项值名称
path = 'D:\Program Files (x86)\Tencent\TIM\Bin\QQScLauncher.exe' # 要添加的exe路径
KeyName = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\' # 注册表项名
try: # 异常处理
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
print(KeyName)
print('添加成功!')
except:
print('添加失败')
def Disable():#将TIM的路径设置为空,同样不能启动
name = 'TIM' # 要添加的项值名称
path = '' # 要添加的exe路径
KeyName = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\' # 注册表项名
try: # 异常处理
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
print(KeyName)
print('删除成功!')
except:
print('删除失败')
def main():
simpleGui.theme("BluePurple")
try:
# 创建 mainWindow 布局
mainWindowLayout = [
[simpleGui.Button('开机自启动', key='keyAutoStart',size=(10, 2)), simpleGui.Button('禁止自启动', key='keyDisable',size=(10, 2))]
]
# 创建窗口,引入布局,并进行初始化。
mainWindow = simpleGui.Window('QQ自启动设置', layout=mainWindowLayout, finalize=True,size=(600,50),element_justification='center')
# 创建一个事件循环,否则窗口运行一次就会被关闭。
while True:
global window
window, event, values = simpleGui.read_all_windows()
print(window, event, values) # 可以打印一下着看变量的内容
if event == simpleGui.WIN_CLOSED:
break
elif window == mainWindow:
if event == 'keyAutoStart':
AutoStart()
else:
Disable()
# 关闭窗口
mainWindow.close()
except Exception as result:
print("函数 main 捕捉到异常:%s" % result)
if __name__ == '__main__':
main()
三、编写一个桌面程序或脚本程序,通过读写注册表实现开机自启动
开发环境:Python3.8 + PyCharm
执行可执行文件时,获取可执行文件的路径,将程序加入到当前用户的自启动项,删除时只是将启动项的路径置空,程序不能自启动,怎么删除新建的启动项我不会了。
import PySimpleGUI as simpleGui
import win32api
import win32con
import os
import sys
def AutoStart():
name = 'Myself'
if getattr(sys, 'frozen', False):
application_path = os.path.dirname(sys.executable)
elif __file__:
application_path = os.path.dirname(__file__)
print("获取当前执行文件的目录:" + application_path)
KeyName = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\'
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, application_path)
win32api.RegCloseKey(key)
print(KeyName)
print('添加成功!')
except:
print('添加失败')
def Disable():
name = 'Myself'
path = ''
KeyName = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\'
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
print(KeyName)
print('删除成功!')
except:
print('删除失败')
def main():
simpleGui.theme("BluePurple")
try:
mainWindowLayout = [
[simpleGui.Button('将本程序加入开机自启动', key='keyAutoStart',size=(20, 2)), simpleGui.Button('将本程序移出开机自启动', key='keyDisable',size=(20, 2))]
]
mainWindow = simpleGui.Window('注册表自启动', layout=mainWindowLayout, finalize=True,size=(600,50),element_justification='center')
while True:
global window
window, event, values = simpleGui.read_all_windows()
print(window, event, values)
if event == simpleGui.WIN_CLOSED:
break
elif window == mainWindow:
if event == 'keyAutoStart':
AutoStart()
else:
Disable()
mainWindow.close()
except Exception as result:
print("函数 main 捕捉到异常:%s" % result)
if __name__ == '__main__':
main()
|