0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
||||||
1 | ||||||
Копирование содержимого окна в bitmap30.06.2024, 18:43. Показов 685. Ответов 19
Метки нет (Все метки)
Всех приветствую,
Столкнулся со следующей проблемой при копировании содержимого экрана в bitmap: содержимое одного из окно десктопового приложения не копируется, в bitmap прилетает изображение экрана находящееся за данным окном. Толи защита какая то стоит от printScr, понять не могу. Также происходит при попытке копирования в буфер стандартными средствами винды (printScr, ножницы, win+shift+s), окно данного приложения просто игнорируется, а в буфер прилетает картинка рабочего стола. делаю все стандартно ...
Спасибо!
0
|
30.06.2024, 18:43 | |
Ответы с готовыми решениями:
19
Увеличение содержимого окна пропорционально увеличению самого окна Копирование одного bitmap в другой Копирование изображения в Bitmap с имеющегося pictureBox Копирование массива в Bitmap. Получаю белые прямоугольники Передача изображения не в Handle окна, а в bitmap |
Модератор
3748 / 2248 / 782
Регистрация: 15.11.2015
Сообщений: 8,956
|
|
30.06.2024, 22:26 | 2 |
И что это за приложение? Как называется?
А если попробовать поискать окно самого приложения и его скопировать?
0
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
30.06.2024, 22:51 [ТС] | 3 |
Приложение для игры в покер, TigerGaming. Что интересно при запуске все нормально, в буфер копируется, как только залогинился появляется описанный выше финт. Чет ничего найти не смог в интернетах по данной теме. Как они такое провернули? ))).
Есть мысль развернуть на виртуальной машине и попробовать скопировать экран прогой с основной, но какой то кривой способ как по мне. Можно пример с поиском окна приложения и его копированием. Хотя бы общий.
0
|
Модератор
3748 / 2248 / 782
Регистрация: 15.11.2015
Сообщений: 8,956
|
|||||||||||||||||||||
30.06.2024, 23:21 | 4 | ||||||||||||||||||||
Artem1979, окно ищется функцией
Вот, копируется содержимое своего окна на себя же со сдвигом:
1
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
01.07.2024, 01:24 [ТС] | 5 |
Спасибо. Проверил, до логина заголовок окна определил без проблем, все отлично работает, скрин окна сохраняется.
После логина в приложение запускает несколько процессов с одинаковым именем GameBrowser.exe, и у всех заголовок окна Н/Д согласно tasklist. Как быть в случае если заголовков нет? Добавлено через 44 минуты Нашел заголовок, обратился, определил DC (не пустой), при этом файл scrCopy.bmp на выходе получаем пустым (белое поле). Не видит BitBlt содержимого окна даже с указанным DC. Как такое может быть не понимаю. Добавлено через 44 минуты Полагаю тут не обошлось без оверлей. Цитата: "Захват экрана - это получение либо статической картинки (мгновенный снимок), либо динамической (видео) собственно того, что на этом экране отображается в данный момент. Если картинка на экране формируется штатными средствами (сначала образ экрана обрабатывается центральным процессором, затем записывается в ОЗУ и оттуда транслируется в видео-подсистему для вывода на экран), то захват экрана в виде отдельного кадра можно осуществить штатными средствами ОС - через клавишу PrintScreen. В этом случае экранный образ помешается в буфер обмена и доступен для любого приложения. Если используется оверлей (то есть картинка изначально формируется графическим процессором, хранится в видеопамяти и оттуда сразу выводится на экран - это характерно для приложений, использующих вычислительные мощности видеокарты, например, игр и видео-плееров), то штатными системными средствами захватить экран не получится - в буфере обмена будет лишь чёрный прямоугольник. Для захвата экрана в режиме оверлей нужен специальный софт, извлекающий картинку непосредственно из памяти видеокарты и сохраняющий её в виде графического файла или видео-ролика." Кто подскажет как извлечь картинку из памяти видеокарты?
0
|
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
|
|
01.07.2024, 06:54 | 6 |
Начиная с Windows 8 появился специальный API для записи экрана.
Вот исходник примера на C (сам не проверял) - https://gist.github.com/mmozei... f3f3165790
0
|
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
|
|
01.07.2024, 14:46 | 7 |
Работает как-то нестабильно: пришлось добавить sleep после DuplicateOutput. Во вложении исходник на Delphi 7, делает скриншот, сохраняет bmp в TEMP, затем открывает этот BMP. В коде нет никаких проверок, написано кое-как, только чтобы проверить работу API, под x64 скорее всего не заработает.
0
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
01.07.2024, 19:04 [ТС] | 8 |
Файл bmp в Темпе создал, а вот открыть не получается, пишет что не является точечным рисунком или формат не поддерживается. Весит 14мб.
0
|
Модератор
3748 / 2248 / 782
Регистрация: 15.11.2015
Сообщений: 8,956
|
|
02.07.2024, 09:56 | 10 |
0
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
02.07.2024, 13:08 [ТС] | 12 |
Да, действительно XnView открывает файл, скриншот есть, вот только окно с хитрым приложением также не видит, копия экрана получается без нужного окна, так же как и при использовании BitBlt.
Добавлено через 7 минут Тоже самое, скринит все что находится за окном приложения, нужное окно не видит Добавлено через 4 минуты Все что смог найти касательно overlay, вот такую статью : http://www.silicontaiga.ru/home.asp?artId=5748 Расписано хорошо, как его скринить не понятно
0
|
4174 / 1824 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
|
|
02.07.2024, 14:32 | 13 |
Через mstsc видно изображение?
Добавлено через 3 минуты Вот чего нарыл - https://learn.microsoft.com/en... l-overview
0
|
Модератор
3748 / 2248 / 782
Регистрация: 15.11.2015
Сообщений: 8,956
|
|||||||||||
02.07.2024, 16:36 | 14 | ||||||||||
Интересно, кто-то ещё использует оверлей? Когда я в MPC включал вывод видео через оверлей система отключала темы.
Вот это попробуй, нашёл в инете. У меня на win 7 не сработало, выдаёт ошибку доступа к памяти, хотя, вроде, память выделена и указатель не нулевой. Модуль с классом для захвата экрана:
Добавил задержку перед снимком и перестал вылетать. Но выдаёт белый прямоугольник. Пробовал на MPC HC. Добавлено через 1 минуту Правда, вывод был не через оверлей. Добавлено через 6 минут Переключил вывод на оверлей и начало вылетать с ошибкой доступа к памяти.
0
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
02.07.2024, 21:00 [ТС] | 15 |
Попробовал, код отработал полностью, ошибок нет. На выходе пустой файл bmp размером 14кб. ((
Добавлено через 2 минуты а как именно Вы переключили вывод на оверлей?
0
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 279
|
|
03.07.2024, 00:40 | 16 |
0
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 279
|
|
03.07.2024, 13:11 | 18 |
0
|
0 / 0 / 0
Регистрация: 01.03.2024
Сообщений: 11
|
|
03.07.2024, 18:54 [ТС] | 19 |
Нет не видит, ни через захват экрана, ни через захват окна.
При захвате экрана видит все что за нужным окном, а при захвате окна черный квадрат
0
|
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 279
|
|
03.07.2024, 19:03 | 20 |
Очень похоже что вы попали на защиту от скриншотов.
гуглить " WDA_EXCLUDEFROMCAPTURE " Сделать её две строчки, а вот отключить возможно только через инъект своей dll в чужой процесс. Исходник самой защиты прилагаю? можете посмотреть на него в OBS NoShow.zip Если поведение один в один с вашим приложением, то вероятнось что это именно защита, немаленькая.
1
|
03.07.2024, 19:03 | |
03.07.2024, 19:03 | |
Помогаю со студенческими работами здесь
20
Печать BitMap без диалогового окна Копирование содержимого из ячейки Копирование содержимого файла Копирование содержимого экрана Копирование содержимого RichTextBox'а Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |