如何捕获正在运行的程序的屏幕输出?

时间:2014-10-24 16:30:57

标签: python

是否可以从另一个python程序中截取正在运行的程序(使用GUI)的屏幕截图? 如果是这样,我可以使用哪些步骤和库? (在Windows上)

例如,让我们说我运行了calc.exe。我想从myprogram.py中截取用户显示内容的屏幕截图。

我的目标是分析受监控程序上显示的内容。

如果无法将屏幕截图隔离到正在运行的预定义程序,我想我将不得不截取全屏截图,但这不太实用。

2 个答案:

答案 0 :(得分:6)

捕捉屏幕截图很简单。只需安装Python Imaging Library并使用ImageGrab.grab()函数返回带有屏幕截图的Image实例。

捕获指定的窗口有点复杂,因为您需要窗口坐标。我建议你安装win32api模块并使用一个名为winGuiAuto.py的小模块。一旦你这样做,你可以做这样的事情:

hwnd = winGuiAuto.findTopWindow(title)
rect = win32gui.GetWindowPlacement(hwnd)[-1]
image = ImageGrab.grab(rect)

但是,捕捉屏幕很容易。如果你想分析屏幕截图中的内容,你会遇到很多复杂问题。这可能是做你想做的错误的方法,应该留作最后的手段。

在大多数情况下,使用windows api更容易直接读取窗口元素的内容,但是不能使用某些第三方GUI工具包。这不在您的问题范围内,因此我不在此详细说明,但您应该阅读上面提到的winGuiAuto.py模块的来源,以获取有关如何执行此操作的示例,以及检查pywinauto库。

答案 1 :(得分:2)

ImageGrab模块仅适用于Windows。 pyscreenshot模块是更好的替代品,可用于将屏幕内容复制到PIL或Pillow图像内存。请阅读以下链接。

https://pypi.python.org/pypi/pyscreenshot