![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
А те 4 примера, что ты привел не работают для этой цели... Первый пример - не то чтобы не граббит оверлеи, он даже из фильма не хочет грабить (запускал готовый .exe), да и причем здесь фильм ? Второй и третий пример - это получение изображений с различных устройств. Или есть возможность захватить то, что идёт на монитор ? Вряд ли... (эти примеры не стал пробовать...) Четвертый пример - автор даже не упомянул об оверлеях... Впрочем, для пущей убедительности, я навсякий случай скачал пример и запустил - оверлеи не граббятся...
-------------------- С уважением, г-н Посол. |
||||
|
|||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
p0s0l
Самый простой вариант это перехватить API-вызов DirectDrawCreate() в чужом (или своём) процессе и тем самым получить интерфейс IDirectDraw, а затем можно с помощью lpDirectDraw->EnumSurfaces() найти оверлейную поверхность и lpDDSurface->GetDC (&hdc). Всё! Имея HDC оверлея делай чё хочешь Если это подходит, то завтра дам пример. PS Чё "бородатый" анектод рассказать нинзя?! -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
А в том примере №1, если не исправить ошибку (в п.4 я говорил уже о ней), то ничего не будет работать у "родного" FrameGrabberDemo.exe.
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
-------------------- С уважением, г-н Посол. |
||||
|
|||||
| JoyEx |
|
||||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
P0S0L
Если в kernel-mode лезть, то тогда можно: хучить в VideoPort драйвере DriverInit(,DataPointer ,), из DataPointer получишь адреса DdUpdateOverlay(), DdXXX и т.п...
И всё же Посмотри аттачи, там мой bin1.zip и bin2.zip (для WinXP) – там loader.exe запускает overlay.exe и грузит в него spy.dll, которая перехватывает вызов DirectDrawCreate()¸тоже самое можно сделать и с CoCreateInstance(), а чтобы не пропустить более ранние процессы надо "пораньше вставать". Это сообщение отредактировал(а) JoyEx - 8.8.2005, 13:40 Присоединённый файл ( Кол-во скачиваний: 15 )
bin1.zip 31,80 Kb-------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||
|
|||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
Вот второй .zip
Это сообщение отредактировал(а) JoyEx - 8.8.2005, 13:40 Присоединённый файл ( Кол-во скачиваний: 16 )
bin2.zip 17,33 Kb-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
За старания, конечно, спасибо! Я б и сам давно уже накатал бы, но это не катит, как я и говорил уже. Вставать пораньше не годиться... Вернее, это годиться, но не для всех задач...
Если уж вставать по-раньше, то проще вначале создать оверлейную поверхность, тогда уже другие программы будут обходиться без неё (это конечно шутка!) PS: Архивы я скачал, но как там хоть какой-то результат-то получить ? В кернел моде хучить - тоже плохой выход -------------------- С уважением, г-н Посол. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
- Перед запуском Loader.exe не должен быть запущен overlay.exe, а если overlay.exe не может создать оверлей, то тогда закрой, например, проигрыватель с оверлеем или типа того. В Win9X мой пример работать не будет. Это сообщение отредактировал(а) JoyEx - 7.8.2005, 15:27 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
Я так-то сразу и запускал loader... Щас убедился, что в процессах нет overlay.exe, запустил loader. Проигрыватели не запущены...
Лучше скажи, что я должен увидеть ? Когда запускаю лоадер, в процессах на долю секунды появляется overlay.exe и исчезает... У меня WinXP... -------------------- С уважением, г-н Посол. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
overlay.exe создает в левом-верхнем углу оверлей типа "Hello, P0S0L! ...", а когда запускаешь через loader.exe - грузится spy.dll (через CreateRemoteThread()), вот она и подменяет адрес ф. DirectDrawCreate() на свой (в таблице импорта overlay.exe) и ждет, когда будет вызов DirectDrawCreate(). Ну вот, когда overlay.exe обратится к DirectDrawCreate(), то попадет в spy.dll и примерно через 1 сек. в оверлее меняется надпись на "Hello from Spy.dll".
p0s0l, тысяча извинений! Я там перепутал первую букву. Уже исправил и переаттачил zip-ы. Это сообщение отредактировал(а) JoyEx - 7.8.2005, 17:00 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
JoyEx, сейчас вроде получше, я хоть что-то вижу
Во, выдаёт: Присоединённый файл ( Кол-во скачиваний: 39 )
err.gif 4,31 Kb-------------------- С уважением, г-н Посол. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
Завтра вечером исправлю
-------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Leksey |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
p0s0l и
JoyEx я надеюсь ,что не помешаю вам. Написал два теста. Один на DirectX, другой WinAPI: WinAPI
DirectX
Как вы думаете какой быстрее работает? А вот и не угадали!!! Быстрее работает первый! Может кто-нибудь сможет объяснить? |
||||
|
|||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Автор топика имеет полное право требовать закрытия флейма. Но мне показалась их беседа полезна - вдруг, наконец, решат?.. Мне кажется тут из разряда "кувалдой кнопки вбивать". Скопировать изображение с рабочего стола, что на WinAPI, что на DX - одно и тоже. Никаких вычислений не требуется. Но в DX может быть куча всего, что тормозит в прогах вроде твоей. Первое, что бросается в глаза - вызовы функций Lock/Unlock. Даже если время на их вызов тратится незначительное при твоей скорости сканирования экрана это может оказаться весомым тормозом. |
|||
|
||||
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
Leksey
Всё зависит от того, где размещены hMemDC и lpDDS. Если в системной памяти, то будет медленно, а если в видеопамяти – быстро, а самое главное - DirectX может сделать синхронизацию по кадрам (VSync!). Попробуй Lock/Unlock сделать вне while. p0s0l Я уже исправил и переаттачил zip-ы. Это сообщение отредактировал(а) JoyEx - 8.8.2005, 14:55 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |