在python中截取应用程序,无论前面是什么

所以我可以使用PIL来抓取桌面的截图,然后使用pywin32来获得它的矩形,并裁剪出我想要的部分。 但是,如果在我想要的窗口前面有东西,它会遮挡我想要的截图的应用程序。 有没有什么办法可以得到一个应用程序当前显示的窗口? 它有这样的数据,即使其他窗口在它的前面。

通过在拍摄前提供我想要的应用程序,我也做了同样的事情:

shell=win32com.client.Dispatch("Wscript.Shell") success = shell.AppActivate(app_name) # Returns true if focus given successfully. 

有一种方法可以使用PrintWindow函数来执行此操作。 它会导致窗口在另一个表面重绘。

我在这里的答案张贴工作代码: 非活动窗口的Python屏幕截图 。 它使用PrintWindow函数。 这是复制隐藏窗口的图像的“正确”方式,但这并不意味着它将始终工作。 这取决于执行正确的消息, WM_Print响应的程序。

如果您尝试使用PrintWindow不起作用,那么您唯一剩下的选项就是在进行BitBlit之前将窗口置于前面。

如果可以,请尝试保存窗口的顺序,然后将应用程序移到前面,截图,然后迅速将其移回。 可能会产生一些恼人的闪烁,但它可能比没有好。

也许你可以在屏幕上放置应用程序,然后把截图,然后把它放回去?

IIRC,而不是在Windows之前 – 与Aero每个窗口都有自己的缓冲区,但在此之前,你只是使用你的方法,获取矩形。 我不确定pywin32是否支持Aero。