Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

EnumSurfaces в контексте потока чужего процесса   Найти похожие ветки 

 
Torvald   (2005-10-19 18:23) [0]

Как, находясь в контексте потока чужего процесса (через hook), можно получить список всех Surfaces (IDirectDrawSurface) или же интерфейс IDirectDraw, если приложение использует DirectX?

И вообще возможно ли это сделать?
Я не знаток COM технологий и подавно DirectX, но вот пришлось столкнуться.

Спасибо.


 
Sapersky   (2005-10-19 19:10) [1]

В составе madCollection/madCodeHook ( http://www.madshi.net ) есть пример. Во всяком случае, получение IDirectDraw там есть. А поверхности - IDirectDraw.EnumSurfaces или перехватить IDirectDraw.CreateSurface.


 
Torvald   (2005-10-19 20:02) [2]


> Sapersky   (19.10.05 19:10) [1]

Спасибо огромное, гляну!


 
Torvald   (2005-10-19 22:44) [3]

Установил madCollection, вещь просто нет слов какая ) почему я раньше про неё не слышал !!!
Глянул пример внедрения/перехвата Direct3D. Всё очень понятно и главное работает.
НО программы для захвата изображения через оверлей, например HyperSnap-DX, работают по-другому.

Специфика madCodeHook в том, что он перехватывает API вызовы, т.е. чтобы получить интерфейс IDirectDraw, там перехватывается функция DirectDrawCreateEx, таким образом невозможно получить уже созданый интерфейс.

HyperSnap-DX работет по-другому, он как-то перехватывает уже загруженые интерфейсы. Как? С помощью дизасемблера/отладчика удалось выяснить, что создаётся глобальный хук (dxsnap.dll) на клавиатуру и в момент нажатия клавиши PrintScreen этот хук передаёт в основную программу "захваченую" картинку.

Вот несколько интересных ресурсов-строк из этой ДЛЛ

"  ... and it is VISIBLE, ddc.dwCaps "
"  alpha = 0x%X"
"  Got OVERLAY surface in EnuSurfCB() "
"  Got OVERLAY surface in EnuSurfCB2()"
"  Got OVERLAY surface in EnuSurfCB3()"
"  Got PRIMARY surface in EnuSurfCB() "
"  Got PRIMARY surface in EnuSurfCB2()"
"  green = 0x%X"
...
"Bits per pixel: %d"
"Capture from MyGetDeviceData()"
"Capture from MyGetDeviceState()"
"CardType: %d"
"CBTHookProc"
...
"ddraw.dll"
"dinput.dll"
"dinput8.dll"
"DirectDrawCreate"
"DirectDrawCreateEx"
"DirectInput8Create"
"DirectInputCreateEx"
"DirectX 3Dfx filter"
"Discard Very First Scroll Lock"
"dwBBitMask = %x"
"dwFourCC = %x, MAKEFOURCC(UYVY) "
"dwGBitMask = %x"
"dwProcId = %8X"
"dwRBitMask = %x"
"dwUBitMask = %X"
"dwVBitMask = %X"
..
"Got lpDDSurface in EnuSurfCB() "
"Got lpDDSurface in EnuSurfCB2() "
"Got lpDDSurface in EnuSurfCB3() "
..
"pDDCreate is NULL"
"pDDSMem after CreateSurface() "
"pDirectDraw = %x, pDirectDraw2 "
"pDirectDraw->GetDisplayMode() "
"pDirectDraw2->EnumSurfaces() for "
"pDirectDraw2->GetDisplayMode() "
"pDirectDraw4->EnumSurfaces() caused "
"pDirectDraw4->GetDisplayMode() "
"pDirectDraw7->EnumSurfaces() caused "
"pDirectDraw7->GetDisplayMode() "
"pDirectInput8Create is NULL"
...

За madCollection спасибо, такое пригодиться )

Может есть другое решение?



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
2-1140436679
alex111
2006-02-20 14:57
2006.03.26
Как сравнить время


15-1141209859
Никита
2006-03-01 13:44
2006.03.26
Описание стандарта Object Pascal


15-1141367537
Ega23
2006-03-03 09:32
2006.03.26
С Днём рождения! 3 марта


2-1141838875
Adios
2006-03-08 20:27
2006.03.26
Проблема с процедурой


3-1138914373
fedor
2006-02-03 00:06
2006.03.26
IB и FIB по разному реагируют на SQL-запрос?