1

我一直在研究在 Windows 7 上使用 wx python 包。具体来说,我希望能够获取现有窗口的图像数据(即不是由 python 程序打开的窗口)。看来我可以通过获取窗口的设备上下文、创建兼容的设备上下文、复制位图,然后从那里以我喜欢的方式使用它来做到这一点。问题是我似乎找不到获取现有窗口的设备上下文(或句柄)的方法。我只看到使用 wx 创建的 python 程序从 windows 获取它们的方法。我怎么能这样做呢?非常感谢!

4

2 回答 2

2

wx 可能没有办法做到这一点。

您需要的 Windows API 非常简单,您可以通过它们来使用它们win32api(或者ctypes,如果您愿意,但这需要更多的工作)。

首先,我不知道您打算如何识别您想要的窗口。如果你有它的类和名称,你可以FindWindow(或者,如果它可能不是顶级窗口,FindWindowEx)。如果你想用别的东西搜索,你可能需要调用EnumWindow(加上EnumChildWindows递归,如果你不确定它是一个顶级窗口)。

此时,您可以调用wx.Windows.AssociateHandlewx.Window对象附加到 HWND。

如果您出于某种原因无法执行此操作,请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 回答