Как я могу получить HDC или ScreenShot из приложения Adobe AIR? - PullRequest
2 голосов
/ 07 марта 2012

Во-первых, я извиняюсь перед вами, мой английский очень короткий. но я стараюсь изо всех сил.

среда:
OpenGL
Win32 API
c ++
Визуальная студия 2010

мой проект:
используя приложение, которое копирует iPhone, созданный Adobe AIR. (это не моя программа)
я хочу текстурировать скриншот этой программы в мой opengl. Многие приложения Win32 могут получить скриншот в реальном времени с помощью следующего кода:

HWND hSrc = ::FindWindow(NULL, "iBBDemo3");
HDC hSrcDC = GetDC(hSrc);
HDC hdc = GetDC(NULL);

RECT targetRect;
GetClientRect(hSrc,&targetRect);

int width = targetRect.right;
int height = targetRect.bottom;
HDC memdc = CreateCompatibleDC(hdc);

int* t;

BITMAPINFO bmii;
ZeroMemory(&bmii,sizeof(bmii));
bmii.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmii.bmiHeader.biBitCount = 32;
bmii.bmiHeader.biWidth = width;
bmii.bmiHeader.biHeight = height;
bmii.bmiHeader.biPlanes = 1;

HBITMAP hBitMapUsing = CreateDIBSection(hdc,&bmii,DIB_RGB_COLORS,(void**)&t,NULL,0);

HDC dcTarget = CreateCompatibleDC(hdc);
SelectObject(dcTarget,hBitMapUsing);
RECT rt;
GetClientRect(NULL,&rt);
::PrintWindow(hSrc, dcTarget, 0);

return t; //t is byte array of texture that i want

этот код работает нормально. и в режиме реального времени обновляется на текстуру.
но приложение Adobe Air не может работать с этим кодом.
FindWindow работает нормально, getdc работает нормально, но байтовый массив снимков экрана чёрного цвета.
кто знает, почему возникает эта проблема или другой способ получить массив байтов скриншота приложения Adobe AIR? помоги мне!

1 Ответ

0 голосов
/ 07 марта 2012

Возможно, что сообщение WM_PRINT , сгенерированное PrintWindow, не обрабатывается целью. Вы можете попробовать BitBlt прямо с целевого DC.

...