ブラウザ内で実行されているアプレットのスクリーンショットを撮ろうとしています。アプレットは JOGL (OpenGL for Java) を使用して 3D モデルを表示します。(1) スクリーン ショットは常に黒または白で表示されます。現在のソリューションでは、通常の GDI 呼び出しが使用されます。OpenGL を実行していないアプレットのスクリーン ショットは問題ありません。
JOGL アプリの例をいくつかここで見つけることができますhttps://jogl-demos.dev.java.net/
(2) 私が達成しようとしているもう 1 つのことは、スクリーン ショット内にもスクロール可能な領域を取得することです。
上記の2つの問題を除いて、インターネットでこのコードを見つけました。
import win32gui as wg
import win32ui as wu
import win32con
def copyBitMap(hWnd, fname):
wg.SetForegroundWindow(hWnd)
cWnd = wu.CreateWindowFromHandle(hWnd)
rect = cWnd.GetClientRect()
(x,y) = (rect[2] - rect[0], rect[3] - rect[1])
hsrccDc = wg.GetDC(hWnd)
hdestcDc = wg.CreateCompatibleDC(hsrccDc)
hdestcBm = wg.CreateCompatibleBitmap(hsrccDc, x, y)
wg.SelectObject(hdestcDc, hdestcBm.handle)
wg.BitBlt(hdestcDc, 0, 0, x, y, hsrccDc, rect[0], rect[1], win32con.SRCCOPY)
destcDc = wu.CreateDCFromHandle(hdestcDc)
bmp = wu.CreateBitmapFromHandle(hdestcBm.handle)
bmp.SaveBitmapFile(destcDc, fname)