介绍:
您是否曾经想过在播放一些朗朗上口的背景音乐时用持续的弹出消息惹恼他们的朋友来恶作剧?在本教程中,我们将探讨如何使用 Python 创建一个简单的应用程序,该应用程序打开一个带有有趣消息的弹出窗口,防止用户关闭它,并播放不断循环的背景音乐。让我们潜入!
声明:
请确保负责任地使用这种恶作剧,并且只对不会受到伤害或烦恼的朋友使用。始终尊重他人的界限,避免打扰他人或给他人带来痛苦。
必需库:
为了构建我们的恶作剧应用程序,我们将使用以下 Python 库:
tkinter
:用于创建弹出窗口ctypes
:终止某些进程psutil
: 用于流程管理pygame
:播放背景音乐time
:引入延迟threading
:用于多线程random
:生成随机数comtypes
:用于音频管理pycaw
:控制系统音频pynput
:用于收听键盘事件
实现:
让我们分解代码并了解每个组件的工作原理:
1.弹出窗口和进程终止:
该函数负责使用库终止特定进程,如任务管理器或命令提示符。它会持续检查这些进程,并在找到时终止它们。
它的作用是在一个无限循环中,遍历当前运行的所有进程,并尝试终止名为"Taskmgr.exe"或"cmd.exe"的进程。如果在尝试终止进程时遇到psutil.NoSuchProcess
、psutil.AccessDenied
或psutil.ZombieProcess
异常,则会忽略该异常并继续执行。每次循环结束后,程序会暂停1秒钟。
def fu1():
while True:
for proc in psutil.process_iter():
try:
if proc.name() == 'Taskmgr.exe' or proc.name() == 'cmd.exe':
proc.terminate()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
time.sleep(1)
2.键盘事件侦听器:
和函数分别定义按下和释放键时的行为。在这种情况下,按键用于终止键盘事件侦听器。
该代码定义了两个回调函数:on_press
和on_release
,分别用于处理按键按下和释放的事件。在fu()
函数中,使用keyboard.Listener
创建了一个键盘监听器对象,并将这两个回调函数作为参数传递给它。通过设置suppress=True
,可以抑制所有按键事件的默认处理。最后,通过调用lis.join()
方法,使监听器进入阻塞状态,等待键盘事件的发生。
需要注意的是,为了运行这段代码,你需要先安装keyboard
库。可以使用以下命令进行安装:
pip install keyboard
这样就可以在Python程序中使用该键盘监听器来捕获特定的按键事件了。
def on_press(key):
if key == keyboard.Key.ctrl:
return False # 返回False表示中止键盘事件的处理
def on_release(key):
pass
def fu():
with keyboard.Listener(on_press=on_press, on_release=on_release, suppress=True) as lis:
lis.join()
3.弹出窗口放置和内容:
该函数使用库创建弹出窗口。该窗口随机放置在屏幕上,并显示两个带有有趣消息的标签。
在函数内部,首先创建了一个tkinter
的Tk
对象作为窗口句柄。然后通过设置resizable
属性为False
,禁止了用户调整窗口大小。接着使用attributes
方法将窗口置顶显示。然后使用geometry
方法设置窗口的大小为400x200像素,并通过random.randrange
函数随机生成窗口的位置。接下来设置窗口的标题为"你干嘛,哎呀"。然后创建两个标签控件,分别显示文本"鸡你太美"和"我爱坤坤",并使用pack
方法将它们添加到窗口中。通过protocol
方法绑定了当关闭窗口时调用closeWindow
函数的事件处理。最后使用attributes
方法去掉了窗口的最小化和最大化按钮,并通过mainloop
方法进入主事件循环,使窗口保持显示状态。
def dow():
window = tk.Tk()
# 不允许修改窗口大小
window.resizable(False, False)
# 窗口置顶
window.attributes('-topmost', 'true')
window.geometry("400x200" + "+" + str(random.randrange(0, window.winfo_screenwidth())) + '+' + str(
random.randrange(0, window.winfo_screenheight())))
window.title('你干嘛,哎呀')
tk.Label(window, text='鸡你太美', bg='red', font=("华文行楷", 75)).pack()
tk.Label(window, text='我爱坤坤', bg='red', font=("华文行楷", 75)).pack()
window.protocol("WM_DELETE_WINDOW", closeWindow)
# 去掉窗口最小化和最大化
window.attributes("-toolwindow", 2)
window.mainloop()
4.弹出窗口关闭处理程序:
当用户尝试关闭弹出窗口时触发该函数。它使用模块显示警告消息,但阻止窗口关闭。
当调用该函数时,会弹出一个带有标题为"警告"、内容为"关不掉吧,气不气"的消息框。该函数没有返回值。
def closeWindow():
messagebox.showinfo(title="警告", message="关不掉吧,气不气")
return
5.键盘事件和弹出窗口线程:
该函数使用库初始化键盘事件侦听器。它创建一个在后台运行的侦听器线程。
if __name__ == '__main__':
p = threading.Thread(target=fu)
p.start()
6.背景音乐和音量控制:
使用AudioUtilities库,代码检索系统的音频设备并激活默认音频终结点音量接口。它将系统音量最大化并播放背景音乐文件,无限循环播放。
首先通过调用volume.SetMasterVolumeLevel(0.0, None)
来将音量设置为最大值,以确保音乐能够被听到。然后使用pygame.mixer.music.load()
方法加载指定路径下的音乐文件"ntm_hh/鸡你太美1.mp3",并使用pygame.mixer.music.play()
方法开始播放音乐。最后,使用一个无限循环来保持音乐播放状态,同时在循环中不断调用volume.SetMasterVolumeLevel(0.0, None)
来保持音量不变。
def fu2():
# 开启声音最大化
volume.SetMasterVolumeLevel(0.0, None)
# 加载音乐文件
pygame.mixer.music.load("ntm_hh/鸡你太美1.mp3")
# 播放音乐
pygame.mixer.music.play()
while True:
volume.SetMasterVolumeLevel(0.0, None)
您可以使用此恶作剧应用程序与您的朋友一起玩乐。自定义弹出窗口消息和背景音乐以适合您的喜好。记住要负责任地使用它并尊重他人的界限。恶作剧快乐!
声明(再次):
请确保您以合乎道德和负责任的方式使用此恶作剧应用程序。在进行任何恶作剧之前,请务必考虑他人的感受和偏好。请记住,每个人都有不同的敏感性和界限。
这就是我们的恶作剧应用程序教程!随意探索和修改代码以创建您独特的恶作剧。祝您编码愉快!
附上源代码:
# coding: utf-8
# name: 张洪银
import random
import threading
import time
import tkinter as tk
from ctypes import cast, POINTER
from tkinter import messagebox
import psutil
import pygame
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from pynput import keyboard
def fu1():
while True:
for proc in psutil.process_iter():
try:
if proc.name() == 'Taskmgr.exe' or proc.name() == 'cmd.exe':
proc.terminate()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
time.sleep(1)
def closeWindow():
messagebox.showinfo(title="警告", message="关不掉吧,气不气")
return
def on_press(key):
if key == keyboard.Key.ctrl:
return False # 返回False表示中止键盘事件的处理
def on_release(key):
pass
def fu():
with keyboard.Listener(on_press=on_press, on_release=on_release, suppress=True) as lis:
lis.join()
def dow():
window = tk.Tk()
# 不允许修改窗口大小
window.resizable(False, False)
# 窗口置顶
window.attributes('-topmost', 'true')
window.geometry("400x200" + "+" + str(random.randrange(0, window.winfo_screenwidth())) + '+' + str(
random.randrange(0, window.winfo_screenheight())))
window.title('你干嘛,哎呀')
tk.Label(window, text='鸡你太美', bg='red', font=("华文行楷", 75)).pack()
tk.Label(window, text='我爱坤坤', bg='red', font=("华文行楷", 75)).pack()
window.protocol("WM_DELETE_WINDOW", closeWindow)
# 去掉窗口最小化和最大化
window.attributes("-toolwindow", 2)
window.mainloop()
def fu2():
# 开启声音最大化
volume.SetMasterVolumeLevel(0.0, None)
# 加载音乐文件
pygame.mixer.music.load("ntm_hh/鸡你太美1.mp3")
# 播放音乐
pygame.mixer.music.play()
while True:
volume.SetMasterVolumeLevel(0.0, None)
def fu3():
threads = []
i = 0
while True:
t = threading.Thread(target=dow)
threads.append(t)
threads[i].start()
i = i + 1
if __name__ == '__main__':
# 获取扬声器设备接口
volume = cast(AudioUtilities.GetSpeakers().Activate(
IAudioEndpointVolume._iid_, CLSCTX_ALL, None), POINTER(IAudioEndpointVolume))
color1 = random.choices(['Red', '#356F9F'])
pygame.init()
pygame.mixer.init()
pygame.display.set_caption("Music Player")
p2 = threading.Thread(target=fu2)
p3 = threading.Thread(target=fu3)
p1 = threading.Thread(target=fu1)
p = threading.Thread(target=fu)
p.start()
p1.start()
p2.start()
p3.start()