如何从Python中的任何工作区从特定窗口获取图像?

ken*_*orb 6 python macos window quartz-graphics

我有以下代码来列出所有窗口(包括全屏窗口):

#!/usr/bin/python
# Prints list of all windows.
import Quartz
for window in Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListOptionOnScreenOnly & Quartz.kCGWindowListExcludeDesktopElements, Quartz.kCGNullWindowID):
    print("%s - %s (PID: %d, WID: %d, Pos: %dx%d, Size: %dx%d)"
        % (
            window['kCGWindowOwnerName'],
            window.get('kCGWindowName', u'(empty)').encode('ascii','ignore'),
            window['kCGWindowOwnerPID'],
            window['kCGWindowNumber'],
            window['kCGWindowBounds']['X'],
            window['kCGWindowBounds']['Y'],
            window['kCGWindowBounds']['Width'],
            window['kCGWindowBounds']['Height'],
            ))
Run Code Online (Sandbox Code Playgroud)

这是示例输出:

$ ./get_window_list_all.py | grep BlueStacks
BlueStacks - BlueStacks App Player (PID: 28084, WID: 42238, Pos: 0x0, Size: 1920x1200)
Run Code Online (Sandbox Code Playgroud)

现在,我想从当前工作区中获取特定窗口的可视内容(例如图像)。我可以使用CGWindowListCreateImage(如图所示这里),但因为它是在全屏模式下,其次这个功能是从所有窗口返回合成图像的窗口不是在当前工作区可见的(所以它不会工作,如果窗口是在其它窗口后面) 。

是否有其他相关功能可用于根据特定窗口的窗口ID获取特定窗口的图像/屏幕快照,而不管其位置(从任何工作区/桌面)以及显示还是隐藏?