公司经常需要接触到自助机,而自助机有个非常重要的事情就是,开机后全屏启动某一个网页
但是由于网络原因,开机后可能还没有连接到网络,因此需要设置延迟启动
用到的模块解析:
- 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() #运行