Доброго времени суток всем! Может сталкивался кто нибудь с сабжем, как реализовать можно? Первое что на ум приходит - использовать ядерные обработчики GDI функций напрямую, также возможно через DxApi (но каким образом хендл создать? мсдн говорит "usermode handle") В общем, любые идеи приветствуются
irusrubin да, они были, ищи по форуму. Намекну, что они были связаны с Гритом и его отладчиком. Он тут выкладывал инфу как получить доступ к экрану. Потом была тема, где кто-то пытался повторить успех, но там, наверно, фейл... ;( Удачи!
Найти поверхность дисплея (SURFOBJ) и снять с нее изображение, кажется, через EngCopyBits. В отладчике у меня есть, сорцы в инете есть. А так я уже плохо помню
Great Ещё давно смотрел твой отладчик. Некоторые вещи очень неплохо написаны. Здорово, что ты его выложил. Про EngCopyBits знаю(от тебя же ), хотелось бы ещё про какие-нибудь способы узнать(просто по определённым причинам этот способ с копированием с поверхности в моей задаче не катит). И ещё может не в тему, но тебя раньше(если я ничего не путаю) интересовал вопрос о выходе после InbvAcquireDisplayOwnership и т.д. Как-нибудь это решилось?
Z3N Это я пытался. Но я пытался взять скриншот с Direct3D оверлеем на Windows 7. Метод Great'а тут бессилен оказался. Да и метод этот на последних видюхах (те что сейчаз продают) выдаёт некорректные скрины. Так что в топку этот метод.
T800 Можете назвать видюхи(желательно что-нибудь не супер топовое), на которых вы тестировали и данный метод не работал?
T800 Блин, а я думал заняться этим... мне тоже надо было... крушение надежд.... Но принтскрин работает же...? Интересно как? Судя по подвисанию в момент скриншота оно там что-то блочит на время снятия скрина... интересно - как работает? А в сырцах винды этого нет? Просто, мне прокси не позволяет качать торренты, а на фекалообменниках сырцов нет... блин.... Взглянул бы на исходники просто ради интереса - стиль кода и т.д.. Х) Может кто выложит на какой-нибудь ifolder, по частям метров по 100, лучше с паролем , анонимность гарантирую, название файла желательно левое (ну, по крайней мере не "мега-порно", а то фильтр стработает), ссылку в личку, плиз....
irusrubin Да у меня самого GF одни (работает всё). Кстати, есть не только проблема с полученным скрином, но и проблема его получения. ТОже столкнулся на ATIшной карте. Какойто параметр там не получается. Уже забыл какой именно, а история общения с Great'ом в jabber'e не сохранилась у меня.
вот теперь очень интересны видеозахват и антискрин) кстати по снятию видеоряда - ведь ж не кадрами? есть какиенить линки?
Ага, блин, работает.... Посмотрел исходники реактос, там копируют при помощи битблт (БЛДЖАД!) В исходниках винды ничего нет... судя по поверхностному поиску. T800 Как выглядят? Полоски? Думаю, что просто надо лочить поверхность на время копирования.
Z3N Просто BMP состоит из 2 или 4 или 8 отдельных частей (неправильно совмещённые прямоугольники). Если остались у меня, то выложу.
В линейках до Vista, метод Great работает стабильно(EngCopyBits), да и на некоторых Vista со старыми карточками. Все дело в том что в нем существует главный Surface и на него копируются все остальные. На новых используется новая модель. В которой каждое приложение имеет собственный буфер. И итоговое изображение появляется наложением окон с флагом visible. Так например рабочий стол это отдельная поверхность, обоина уже другая. Еще один немаловажный факт, память для окон используется в основном из usermode. Если запусить на обоих платформах USERMODe скриншот то работать он будет стабильно на всех машинах. Тут родился POC. Я дергал ядерные аналоги функций CreateCompatibleDC CreateCompatibleBitmap SelectObject BitBlt скриншоты получал, но стабильности так добиться не смог. Данный способ не будет работать если окно рисуется DirectX и OpenGl.