まず、私はあなたに私の英語は非常に短いです。しかし、私はベストを尽くす。Adobe AIRアプリケーションからHDCまたはScreenShotを入手するにはどうすればよいですか?
環境:
openglの
のWin32 API
C++
のVisual Studio 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はワークファインですが、スクリーンショットのバイト配列は全ピクセルの黒です。
この問題が発生する理由、またはAdobe AIRアプリケーションのスクリーンショットのバイト配列を取得する別の方法を知っている人は誰ですか?助けて!