1

Windows 7 で wx python パッケージを使用することを検討しています。具体的には、既存のウィンドウ (つまり、python プログラムによって開かれたウィンドウではない) の画像データを取得できるようにしたいと考えています。ウィンドウのデバイス コンテキストを取得し、互換性のあるデバイス コンテキストを作成し、ビットマップをコピーして、そこから好きなように使用することで、これを行うことができるようです。問題は、既存のウィンドウのデバイス コンテキスト (またはハンドル) を取得する方法が見つからないように見えることです。作成された wx を使用して python プログラムを Windows から取得する方法のみが表示されます。どうすればこれを行うことができますか?どうもありがとう!

4

2 に答える 2

2

wx にはこれを行う方法がない場合があります。

必要な Windows API は非常に単純であり、それらを介して使用できますwin32api(必要にctypes応じて、より多くの作業が必要になります)。

まず、必要なウィンドウを特定する方法がわかりません。クラスと名前FindWindowが分かっている場合は、(トップレベル ウィンドウでない場合は) 実行できますFindWindowEx。他の何かで検索したい場合は、おそらく呼び出す必要がありますEnumWindow(さらにEnumChildWindows、それがトップレベルのウィンドウであるかどうかわからない場合は、再帰的に)。

この時点で、呼び出すだけでオブジェクトを HWNDwx.Windows.AssociateHandleにアタッチできます。wx.Window

何らかの理由でそれができない場合はGetDC、HWND の表示コンテキストを提供します。次に、メモリ DC を作成するか、元の wx ウィンドウの下にあるネイティブ ウィンドウの DC を取得できますBitBlt

于 2013-11-15T01:01:19.837 に答える
1

他の答えを拡張するために、このコードを試してください(テストされていません。現在、Windowsを使用していません)...

# first use FindWindow or FindWindowEx to determine window handle
frame = wx.Frame(None)
frame.AssociateHandle(handle)
dc = wx.ClientDC(frame)
width, height = dc.GetSize()
bitmap = wx.EmptyBitmap(width, height)
mdc = wx.MemoryDC(bitmap)
mdc.Blit(0, 0, width, height, dc, 0, 0)
del mdc
bitmap.SaveFile('output.png', wx.BITMAP_TYPE_PNG)
于 2013-11-15T01:09:54.037 に答える