Задать вопрос
zzWerOk
@zzWerOk
Эм...

Как обойти защиту от снятия скриншотов?

При изучении языка добрался до OpenCV, а там уже дело дошло до скриншотов. И вот что заметил:
применяя различные библиотеки для скриншотов все работает так как библиотека работать должна (кто-то быстро, кто-то медленно и т.д.) Но! Ни одна библиотека не работает пока запущена игра UNDECEMBER.
Я так понимаю у этой игры есть своего рода защита от экранокопирования...

Тестировал долго и нудно, даже компилировал приложение и отправлял другу - результат тот же:
-Игра не запущена - все ок
-Игра запущена - приложение стартует на секунду и выдает скрин экрана (даже саму игру захватывает) / или сразу ошибается и не запускается даже
-Запуск приложение перед игрой - приложение работает на 100% до момента пока начинается вступительная заставка. Потом ошибки и все.

Делал через try - одни библиотеки тупо перестают работать даже после выключения игры, другие после отключения игры продолжают скриншотить.

import cv2
import numpy as np
import pyautogui
import pygetwindow
import pyscreenshot
from PIL import ImageGrab

while True:

    bbox = (0, 0, 500, 500)

    from mss import mss


    def capture_screenshot():
        with mss() as sct:
            try:
                monitor = sct.monitors[0]
                sct_img = sct.grab(monitor)
                return sct_img
            except Exception as err:
                print(err)

    img = pyscreenshot.grab(bbox)
    img = pyscreenshot.grab(bbox).load()
    img = pyautogui.screenshot().crop(bbox)

    img = np.array(img)

    cv2.imshow('Display', img)

    if cv2.waitKey(1) == ord('q'):
        cv2.destroyAllWindows()
        break


ошибка:

File "C:\Users\reale\anaconda3\envs\UndecemberAutoPy\py390\lib\site-packages\pyscreeze\__init__.py", line 145, in wrapper
return wrappedFunction(*args, **kwargs)
File "C:\Users\reale\anaconda3\envs\UndecemberAutoPy\py390\lib\site-packages\pyscreeze\__init__.py", line 457, in _screenshot_win32
im = ImageGrab.grab()
File "C:\Users\reale\anaconda3\envs\UndecemberAutoPy\py390\lib\site-packages\PIL\ImageGrab.py", line 46, in grab
offset, size, data = Image.core.grabscreen_win32(
OSError: screen grab failed


Собственно что я хочу узнать. Есть ли библиотеки для работы с видеоадаптером? Или как обойти эту защиту?
  • Вопрос задан
  • 483 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
zzWerOk
@zzWerOk Автор вопроса
Эм...
Значит продолжил я копаться и вот что накопал:

import numpy as np
import cv2
import mss

while True:

    with mss.mss() as sct:
        monitor = {'top': 150, 'left': 100, 'width': 1920, 'height': 1080}
        img = np.array(sct.grab(monitor))

    cv2.imshow("test", np.array(img))
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break


вот этот код позволил мне снимать экран с достаточно большой скоростью ФПС (точно не замерял еще, но 20 минимум на 2к разрешении). НО! При условии что я запускаю свое приложение перед запуском игры. Если же игра уже запущена, то мое приложение отказывается работать выдавая черный экран.

Но протестировав пол часа в разрешении 2к я не заметил ни каких особых сложностей или проблем.

Оставлю это тут, может кому пригодится
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы