Главная страница
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.048 c
2-1141496084
bogdan
2006-03-04 21:14
2006.03.26
pagecontrol и speedbutton


1-1140798177
аноним
2006-02-24 19:22
2006.03.26
Помогите разобраться с AV


2-1142110719
afisher
2006-03-11 23:58
2006.03.26
как связывать данные переменной между формами?


8-1129952904
Idx
2005-10-22 07:48
2006.03.26
Делаю “skin” для TabControl помогите


9-1126909592
Dark Lord
2005-09-17 02:26
2006.03.26
OpenGL и 3ds файлы