如何截取应用程序的屏幕,无论前面有什么?

7 投票
7 回答
17868 浏览
提问于 2025-04-15 12:40

我可以用PIL这个库来截取桌面的屏幕截图,然后用pywin32来获取这个截图的矩形区域,裁剪出我想要的部分。不过,如果有其他窗口挡在我想截屏的应用程序前面,那就会遮住我想要的内容。有没有办法获取到应用程序当前显示的内容呢?即使其他窗口在它前面,它应该还是有这些数据的。

7 个回答

2

也许你可以把应用程序放在屏幕外面,然后截图,再把它放回原来的位置?

4

我在拍照之前,先把我想要聚焦的应用程序调到前面,这样就能做到同样的效果:

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

我在这里的回答中发布了可以运行的代码:关于如何打印不活动窗口的截图 + win32gui。这个代码使用了 PrintWindow 这个函数。

这是一种“正确”的方法,可以复制隐藏窗口的图像,但这并不意味着它总是有效。能否成功取决于程序是否正确处理了 WM_Print 这个消息。

如果你尝试使用 PrintWindow 但没有效果,那么你唯一的选择就是在进行 BitBlit 操作之前,把窗口调到最前面。

撰写回答