Найти тему

Как сделать 💥 ПРАНК? Плывущий экран

Плывущий Экран Это не вирус))) 👹
Плывущий Экран Это не вирус))) 👹

Привет друзья! Хочу с вами поделиться кодом, который поможет вам разыграть друзей :))

Если кому интересно как сделать такое на Python, то вот здесь https://zen.yandex.ru/video/watch/60d8b5b3354fda70f98a733f можно посмотреть, а теперь давайте разберемся с кодом этой шутки/пранка.

Будем использовать Python и несколько библиотек.

Нам потребуется библиотека opencv-python - для работы с экраном - для вывода нашего плывущего экрана.

Библиотека pyautogui - для создания скриншота экрана.

Библиотека numpy - для работы с экраном в виде массива данных.

И наконец библиотека pywin32 - для работы с win32 с курсором мышки.

Проинсталлировать нужные библиотеки можно одной командой в терминале: pip install opencv-python pyautogui Pillow pywin32

Импортируем необходимые библиотеки:
import pyautogui, cv2, numpy, random

Ждем 1 секунду:
cv2.waitKey(1000)

Делаем скриншот экрана:
image_screenshot = pyautogui.screenshot()

Помещаем скриншот в массив numpy:
_array_image = numpy.array(image_screenshot)

Формируем картинку для cv2:
image = cv2.cvtColor(_array_image, cv2.COLOR_RGB2BGR)

Создаем окно вывода изображения:
cv2.namedWindow("window", cv2.
WND_PROP_FULLSCREEN)

Делаем его полноэкранным:
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.
WINDOW_FULLSCREEN)

Делаем его поверх всех окон:
cv2.setWindowProperty("window",cv2.WND_PROP_TOPMOST,cv2.
WND_PROP_TOPMOST)

Импортируем необходимые библиотеки для работы с указателем мыши:
import win32api
import win32con

Определяем функцию для события мыши - движение
def mouse_evt(event, x, y, flags, param):
# Mouse is Moving
if event == cv2.EVENT_MOUSEMOVE:
win32api.SetCursor(win32api.LoadCursor(0, win32con.IDC_ARROW))

Привязываем эту функцию на вызов при любых событиях связанных с мышью:
cv2.setMouseCallback("window", mouse_evt)
Показываем изображение пользователю на экране:
cv2.imshow("window", image)

Определяем размеры экрана ширину и высоту:
_width = _array_image.shape[1]
_height = _array_image.shape[0]

Разбиваем на колонки экран:
_columns = 40

Определяем ширину одной колонки:
_step = _width // _columns

Определяем скорость шага вниз:
_move_down_by = 5

Переменная для отслеживания кода нажатой клавиши:
_key = 0

В цикле, пока не нажмем ESC (код 27) выполняем:
while _key != 27:

цикл: выбираем случайным образом колонку:
_col = random.randint(0,_columns)*_step

цикл: и смещаем ее содержимое вниз
for i in range(_move_down_by):
_array_image[i+1:_height,_col:_col+_step,:3] = _array_image[i:_height-1,_col:_col+_step,:3]
image = cv2.cvtColor(_array_image, cv2.COLOR_RGB2BGR)
cv2.imshow("window", image)

цикл: считываем код нажатой клавиши (если нажимали)
_key = cv2.waitKey(1)

Если нажали ESC - то выходим из цикла и уничтожаем все окна.
cv2.destroyAllWindows()

Для тех, кто в позитиве, вот весь код:

import pyautogui, cv2, numpy, random

cv2.waitKey(1000)

image_screenshot = pyautogui.screenshot()
_array_image = numpy.array(image_screenshot)
image = cv2.cvtColor(_array_image, cv2.COLOR_RGB2BGR)

cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.setWindowProperty("window",cv2.WND_PROP_TOPMOST,cv2.WND_PROP_TOPMOST)

import win32api
import win32con

def mouse_evt(event, x, y, flags, param):
# Mouse is Moving
if event == cv2.EVENT_MOUSEMOVE:
win32api.SetCursor(win32api.LoadCursor(0, win32con.IDC_ARROW))

cv2.setMouseCallback("window", mouse_evt)

cv2.imshow("window", image)

_width = _array_image.shape[1]
_height = _array_image.shape[0]
_columns = 40
_step = _width // _columns
_move_down_by = 5
_key = 0
while _key != 27:
_col = random.randint(0,_columns)*_step
for i in range(_move_down_by):
_array_image[i+1:_height,_col:_col+_step,:3] = _array_image[i:_height-1,_col:_col+_step,:3]
image = cv2.cvtColor(_array_image, cv2.COLOR_RGB2BGR)
cv2.imshow("window", image)
_key = cv2.waitKey(1)

cv2.destroyAllWindows()
cv2.destroyAllWindows()