Пожалуйста, обратите внимание, что пользователь заблокирован
Всех приветствую, данным постом преследую две цели.
1) Найти решение своей проблемы при написании скриншота скрытого онка.
2) Проинформировать людей о таком способе реализации скрытого браузера.
Уверен, что для старичков эта схема не будет новой, однако я ни в коем случае не притендую на авторство (статья 2019 года, а сам метод датируется 2004ым?) + этот метод куда уж лучше реализации через CreateDesktop
Далее цитирую самого автора
Спустя 3 дня мозгоебки и перебирания множества способов отрисовки ... у меня не выходит ничего кроме черного экрана.
Максимальный из результатов - вот (и то, это нельзя считать успешным вариантом, так как это просто последний хендл, оставшийся в оперативной памяти)
Собственно вопрос заключается в этом: Как сделать скриншот MDI формы за областью экрана.
1) Найти решение своей проблемы при написании скриншота скрытого онка.
2) Проинформировать людей о таком способе реализации скрытого браузера.
Уверен, что для старичков эта схема не будет новой, однако я ни в коем случае не притендую на авторство (статья 2019 года, а сам метод датируется 2004ым?) + этот метод куда уж лучше реализации через CreateDesktop
Далее цитирую самого автора
У вас должно быть более 3 реакций для просмотра скрытого контента.
1. В ОС Windows существует механизм хендлов (Handle == 32-x разрядное число без знака).
1. Handle имеется практически у каждого объекта, в т.ч. у форм, кнопок, полей ввода и т.п.
2. По Handle можно обратиться к определенному объекту, например через SendMessage() / PostMessage().
4. Объекты могут быть выстроены в определенную иерархию объект родитель -> дочерний объект, например форма -> кнопки на ней.
3. (Самое важное) У графических и не только объектов, у которых есть Handle (т.е. у WinForms) есть одно
просто замечательнейшее свойство - их можно "удочерять" через WinAPI метод SetParent()
SetParent(Handle целевого объекта, Handle "родителя").
Причем строгий механизм контроля "удочерения" для этого API метода в Windows отсутствует!
Т.е. мы можем создать форму через WinAPI, которая будет находиться за пределами видимой части рабочего стола...
А затем запустить нужное нам приложение (например Chrome) и удочерить его формы в нашу.
P.S. Процесс скрытого запуска приложений и форм далее не рассматривается - это все можно нагуглить самим.
Итого, что мы имеем:
1. Можем запустить процесс в фоне, без вызова CreateDesktop() !
2. Чтобы сделать скриншот нашего скрытого рабочего стола - нам нужно отрисовать в Bitmap буфер только нашу форму, используя PrintWindow() !
3. Можем легко взаимодействовать с его графическими элементами через SendMessage() / PostMessage(),
посылать клики/движения мыши и нажатия клавиш !
4. Данный способ довольно не просто задетектить, т.к. механизм MDI используется в огромном перечне белого софта,
1. Handle имеется практически у каждого объекта, в т.ч. у форм, кнопок, полей ввода и т.п.
2. По Handle можно обратиться к определенному объекту, например через SendMessage() / PostMessage().
4. Объекты могут быть выстроены в определенную иерархию объект родитель -> дочерний объект, например форма -> кнопки на ней.
3. (Самое важное) У графических и не только объектов, у которых есть Handle (т.е. у WinForms) есть одно
просто замечательнейшее свойство - их можно "удочерять" через WinAPI метод SetParent()
SetParent(Handle целевого объекта, Handle "родителя").
Причем строгий механизм контроля "удочерения" для этого API метода в Windows отсутствует!
Т.е. мы можем создать форму через WinAPI, которая будет находиться за пределами видимой части рабочего стола...
А затем запустить нужное нам приложение (например Chrome) и удочерить его формы в нашу.
P.S. Процесс скрытого запуска приложений и форм далее не рассматривается - это все можно нагуглить самим.
Итого, что мы имеем:
1. Можем запустить процесс в фоне, без вызова CreateDesktop() !
2. Чтобы сделать скриншот нашего скрытого рабочего стола - нам нужно отрисовать в Bitmap буфер только нашу форму, используя PrintWindow() !
3. Можем легко взаимодействовать с его графическими элементами через SendMessage() / PostMessage(),
посылать клики/движения мыши и нажатия клавиш !
4. Данный способ довольно не просто задетектить, т.к. механизм MDI используется в огромном перечне белого софта,
Спустя 3 дня мозгоебки и перебирания множества способов отрисовки ... у меня не выходит ничего кроме черного экрана.
Максимальный из результатов - вот (и то, это нельзя считать успешным вариантом, так как это просто последний хендл, оставшийся в оперативной памяти)
Собственно вопрос заключается в этом: Как сделать скриншот MDI формы за областью экрана.
Последнее редактирование: