如何用python实现一键注入开机自启动
摘要
公司经常需要接触到自助机,而自助机有个非常重要的事情就是,开机后全屏启动某一个网页
但是由于网络原因,开机后可能还没有连接到网络,因此需要设置延迟启动
用到的模块解析:
tkinter —- 用于UI交互,当然input也可以,但是我们的是准备做给公司里不懂技术的运维人员使用的,所以最好有UI界面
messagebox —- 用于弹出窗口,用于提示
messagebox.showwarning(title=”标题”,message=”警告弹窗”)
messagebox.showinfo ( title=” 标题 “,message=”提示弹窗” )
messagebox. showerror ( title=” 标题 “,message=”错误弹窗” )
os —- 用于执行cmd命令,较为关键,语法为os.system(“cmd命令”),成功返回0,错误返回其他内容,参考https://blog.csdn.net/lwgkzl/article/details/81060016
string —- 用于字符串钩子,获取tkinter上绑定的变量内容,获取用户输入。
time=StringVar() —- 注册钩子
time.get() —- 获取用户输入
getpass —- 用于获取系统用户名,组合成系统桌面路径地址。
getpass.getuser() —- 获取用户系统登录名
getpass.getpass() —- 提示用户输入密码
需要的模块我们简单的过了一遍,下面为具体实现代码:
from tkinter import * #UI库 from tkinter import messagebox #消息弹出 import os #用于执行cmd命令 import string #StringVar要用 字符串钩子 import getpass #用于获取系统用户名称 def start(): #判断是否是数字并将小时处理为秒 i=time.get() #获得字符串钩子的值 k=link.get() #获得字符串钩子的值 n=name.get() try: #错误抓捕 判断是否为数字 i=str(int(i)) except ValueError: messagebox.showwarning(title="输入错误",message="请输入一个数字!") #警告消息弹窗 else: generate(i,k,n) def cancel(): #删除生成的文件 print("正在删除文件文件") n=name.get() #获取用户输入的任务名称 userName=getpass.getuser() #获取系统用户名称 file_name = "C:\\Users\\"+str(userName)+"\\Desktop\\"+n+".bat" #生成桌面文件路径 os.remove(file_name) #删除桌面文件 boolStatus=os.system("cd \"%userprofile%/「开始」菜单/程序/Startup/\" && del "+n+".bat") #由于del特性,无法直接删除,需先进入启动目录后删除 if boolStatus == 0: print("取消任务成功") messagebox.showinfo(title="成功",message="取消任务成功") else: print("取消任务失败,您可以在启动目录中自行删除") messagebox.showwarning(title="失败",message="取消任务失败,您可以在启动目录中自行删除") def generate(t,l,n):#生成代码 print("生成代码") #exe为全屏启动ie打开指定地址代码 exe=""" "C:\Program Files\Internet Explorer\iexplore.exe" -k "{0}" """.format(l); #txt在exe的基础上加入延时启动 txt=""" @echo off ping 127.0.0.1 -n {0} >nul{2} """.format(t,l,exe); #开始写入到实际文件中 write_file(txt,exe,n) #写入文件 def write_file(txt,exe,name): print("开始写入文件") #获取系统用户名称 userName=getpass.getuser() #设置文件桌面路径及名称 file_name = "C:\\Users\\"+str(userName)+"\\Desktop\\"+name+".bat" # 以写入的方式打开 f = open(file_name,'w') # 写入内容 f.write(txt) # 关闭文件 f.close() #复制文件到启动目录 由于userprofile目录无法通过python直接获取,无法直接写入,需要通过bat方式拷贝到启动目录 boolStatus=os.system("copy /y \""+str(file_name)+"\" \"%userprofile%/「开始」菜单/程序/Startup\"") #设置完开机自启,延时启动,开始设置桌面无延时的bat文件 f = open(file_name,'w') f.write(exe) f.close() if boolStatus == 0: messagebox.showinfo(title="成功",message="写入桌面与启动目录成功") else: messagebox.showwarning(title="失败",message="写入失败,请尝试使用管理员权限打开") soft=Tk() soft.geometry('160x200+885+465') #初始化窗口大小信息 soft.resizable(0, 0) #设置窗口大小不可更改 #应用名称 textName=Label(soft,text="程序名称",compound="center").grid(row=0,column=0,columnspan=2,padx=0,pady=0) name=StringVar() #声明字符串钩子 textNameInput=Entry(soft,textvariable=name).grid(row=1,column=0,columnspan=2,padx=5,pady=0) #启动延时 textTime=Label(soft,text="请输入开机后等待时间(秒)",compound="center").grid(row=2,column=0,columnspan=2,padx=0,pady=0) time=StringVar() #声明字符串钩子 time.set("120") #设置初始值 textTimeInput=Entry(soft,textvariable=time).grid(row=3,column=0,columnspan=2,padx=5,pady=0) #打开的网址 textLink=Label(soft,text="请输入需要打开的网址",compound="center").grid(row=4,column=0,columnspan=2,padx=0,pady=0) link=StringVar() #声明字符串钩子 link.set("http://") #设置初始值 textLinkInput=Entry(soft,textvariable=link).grid(row=5,column=0,columnspan=2,padx=5,pady=0) button1=Button(soft,text="取消任务",command=cancel).grid(row=6,column=0,padx=5,pady=10) button2=Button(soft,text="设置任务",command=start).grid(row=6,column=1,padx=5,pady=10) soft.mainloop() #运行
评论(0)