前言:上一期我们简单学习了如何编写一个多次弹窗警告用户的exe伪恶意文件。我们知道了把Python初始文件编译为exe文件后,程序在没有Python环境的情况下也能正常运行。我们上次编写的程序仅仅只是伪造系统正在执行关机命令前的倒计时的假象,实际系统最后并不会执行关机命令。那么好,本次我们将学习如何让程序先进行倒计时警告用户系统即将关机,最后执行关机指令。
编程思路:本次编程我们是对上次程序的修改优化(即补充关机指令,优化弹窗显示)并补充上次所讲的需要扩展讲解的内容。因次编程思路与上次相比基本无异 -先从主题入手,tkinter,os库是主体;其次,多次的弹窗,我们需要多线程,因此threading库必不可少;为了伪造系统的随机性,我们需要random库;为了获取系统的真实信息及执行系统操作,我们需要os,platform两个库;为了表现程序真实性,我们需要time库......至此,所有库都准备好了-tkinter,random,time,os,platform,threading。
import tkinter
import os
import threading
import time
import random
import platform
import ctypes
1,弹窗颜色修改,优化
上次我们为了编程方便,使用十种颜色:红,橙,黄,绿,蓝,紫,白,黑,金,灰)来给我们的弹窗上色。但是运行之后我们发现了两个需要改进的地方:一,弹窗颜色中有黑色,这导致程序运行后弹出的弹窗匹配到黑色时,窗口显示的内容会完全看不清楚,严重影响程序的整体运行效果;二,颜色种类过于单一,导致弹窗主体颜色重复率很高。因次本次编程中我们将解决这两个主要问题:一,删除列表s中的黑色;二,增加列表s中的颜色数量(扩充至15个)。(当然,以上只是我的个人感受,大家可自行调整,挑选自己喜欢的颜色)。(如下所示)
s=['red','orange','yellow','green','blue','teal','purple','peru','gold','violet','salmon','navy','tan','maroon','azure']
2,主窗口优化
上次我们利用while函数对倒计时迭代器的返回内容进行一对一匹配(即不让弹窗颜色始终保持原状)。但是后面我们发现程序运行后while循环的效果与删除后无异,秉持代码追求更简洁,更高效的原则,我们删除了while循环(wihle循环影响程序运行速度)。(如下所示)
def windows():window = tkinter.Tk()window.title('{} {} {} {}警告!!!'.format(os.name,platform.machine(),platform.node(),platform.version()))window.geometry("{}x{}".format(1160,600))number=random.randint(0,14)tkinter.Label(window,text='{}系统将在{}秒后自动关机'.format(platform.system(),count_down()[0])*1,font=('楷体',30),bg='{}'.format(s[number]),width=1160,height=600).pack()window.mainloop()count_down().remove(count_down()[0])
3,添加关机执行单元
在 Python 中,可以使用 os 模块中的 os.system() 函数来执行系统命令。因此,可以使用如下命令执行关机:
os.system('shutdown -s -t 0')
但是注意:这个命令执行的并不是强制关机。因此当系统关机前还有正在运行的程序时,在最后关机时系统会提示用户是否确认关机,此时用户有撤销关机的权利。因此,如果你觉得你需要程序执行强制关机来整蛊室友,可以将以上命令修改为以下命令:
os.system('shutdown -f -s -t 0')
注意:这种方法只能在 Windows 系统中使用,在其他操作系统中可能不能正常工作。需要注意的是,强制关机会导致程序强行终止,可能会导致未保存的数据丢失,因此应谨慎使用,别让室友把你打成猪头。
程序衔接(如下所示)
time.sleep(1)
os.system('shutdown -f -s -t 0')
4,完整代码展示:
import tkinter
import os
import threading
import time
import random
import platform
import ctypess=['red','orange','yellow','green','blue','teal','purple','peru','gold','violet','salmon','navy','tan','maroon','azure']begin=12
def count_down():seconds=[]for i in range(begin,0,-1):seconds.append(i)return secondsdef windows():window = tkinter.Tk()window.title('{} {} {} {}警告!!!'.format(os.name,platform.machine(),platform.node(),platform.version()))window.geometry("{}x{}".format(1160,600))number=random.randint(0,14)tkinter.Label(window,text='{}系统将在{}秒后自动关机'.format(platform.system(),count_down()[0])*1,font=('楷体',30),bg='{}'.format(s[number]),width=1160,height=600).pack()window.mainloop()count_down().remove(count_down()[0])while begin>0:mark=threading.Thread(target=windows)mark.start()time.sleep(1)begin-=1time.sleep(1)
os.system('shutdown -f -s -t 0')
5,运行效果展示:
后面将Python初始文件编译为exe文件的步骤我就不再赘述了,新手小白可以看一下我的上一篇文章,谢谢!
拓展延伸:
一,什么是Python第三方库?
Python第三方库是除Python官方提供的标准库之外,由第三方公司、社区或个人开发并发布的库。
二,Python标准库与第三方库的联系和区别
Python标准库和第三方库是Python编程中常用的两种不同类型的库,它们在安装方式、来源、可靠性和功能等方面存在一些区别。
三,Pyinstaller的常用命令有哪些?
-h, --help 显示帮助信息并退出
-v, --version 显示程序版本信息并退出
-F, --onefile 生成单个可执行文件(默认为多文件捆绑包)
-D, --onedir 生成一个包含多个文件的目录作为可执行程序
-a, --ascii 不包含 Unicode 字符集支持
-d, --debug 产生 debug 版本的可执行文件
-w, --windowed, --noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c, --nowindowed, --console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR, --out=DIR 指定 spec 文件的生成目录
-p DIR, --path=DIR 设置 Python 导入模块的路径
-n NAME, --name=NAME 指定项目(产生的 spec)名字
-i ICON, --icon=ICON 为 Windows 可执行文件指定图标
-add-data SOURCE:DEST 添加非 Python 文件或目录到打包文件中
-add-binary SOURCE:DEST 添加其他二进制文件到可执行文件中
-p DIR, --paths DIR 搜索导入的路径(如使用 PYTHONPATH)
-h, --help 显示帮助信息并退出
-v, --version 显示程序版本信息并退出
-F, --onefile 生成单个可执行文件(默认为多文件捆绑包)
-D, --onedir 生成一个包含多个文件的目录作为可执行程序
-a, --ascii 不包含 Unicode 字符集支持
-d, --debug 产生 debug 版本的可执行文件
-w, --windowed, --noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c, --nowindowed, --console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR, --out=DIR 指定 spec 文件的生成目录
-p DIR, --path=DIR 设置 Python 导入模块的路径
-n NAME, --name=NAME 指定项目(产生的 spec)名字
-i ICON, --icon=ICON 为 Windows 可执行文件指定图标
-add-data SOURCE:DEST 添加非 Python 文件或目录到打包文件中
-add-binary SOURCE:DEST 添加其他二进制文件到可文件中
期待你的交流指教,我是闪云-微星,我们下期再见!