如何从Adobe AIR应用程序获取HDC或ScreenShot?

时间:2012-03-07 13:56:36

标签: c++ visual-studio winapi air adobe

首先,我向你倾诉我的英语很短。但我尽我所能。

环境:
OpenGL的
win32 api
C ++
视觉工作室2010年

我的项目是:
使用由Adobe AIR制作的iPhone副本的应用程序。 (这不是我的计划)
我想将程序的截图纹理化到我的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是workfine但截图的字节数组是全像素的黑色 谁知道为什么会出现这个问题或者获取Adobe AIR Application屏幕截图的字节数组的其他方法?帮助我!

1 个答案:

答案 0 :(得分:0)

PrintWindow生成的WM_PRINT消息可能未被目标处理。您可以直接从目标DC尝试BitBlt