2012-03-07 14 views
2

まず、私はあなたに私の英語は非常に短いです。しかし、私はベストを尽くす。Adob​​e 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アプリケーションのスクリーンショットのバイト配列を取得する別の方法を知っている人は誰ですか?助けて!

答えて

0

PrintWindowによって生成されたWM_PRINTメッセージがターゲットによって処理されていない可能性があります。ターゲットのDCから直接BitBltを試すことができます。

関連する問題