繁体   English   中英

wxPython - 使用wx python模块获取现有的windowDC /句柄?

[英]wxPython - Get existing windowDC/handle using wx python module?

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

wx可能无法做到这一点。

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

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

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

如果由于某种原因无法做到这一点, GetDC会为您提供HWND的显示上下文。 然后,您可以创建一个内存DC,或者获取wx窗口底层下的本机窗口的DC,以及从一个到另一个的BitBlt

只是为了扩展另一个答案,试试这段代码(未经测试,我现在不在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM