【问题标题】:How to take screenshot of background app in python 2.7 for mac如何在 python 2.7 for mac 中截取后台应用程序的屏幕截图
【发布时间】:2019-08-11 11:02:19
【问题描述】:

我一直在尝试制作一个程序,当应用程序上的数字发生变化时通知我。我一直在使用 ImageGrab 然后 pytesseract 哪个有效,但是当我可以直观地看到数字时,我只能弄清楚如何截取屏幕截图。如果有一种方法可以在应用程序最小化(在屏幕上不可见)的情况下拍摄应用程序的图像,那将是非常好的,这样我就可以在它运行时处理其他事情。我还需要该应用程序的某个部分的图片,我需要在应用程序内制作照片拍摄位置的边界框。

这是我目前正在使用的,它占据了整个屏幕的某个部分:

img = ImageGrab.grab(bbox=(1400,875,1445,905))

我认为可能有一种方法可以使用 Quartz 来实现,但我不知道如何在后台应用程序的区域中实现。

【问题讨论】:

  • 您不能对不在您的屏幕上的内容进行屏幕

标签: python macos python-2.7 screenshot


【解决方案1】:

可以在 MacOS 中使用screencapture api 截取后台运行的窗口的屏幕截图。您可以在终端输入man screencapture 来查看文档。

对于您的用例,它看起来像这样:

screencapture -l <windowId> -R <x,y,w,h>

如您所述,您可以使用Quartz 找到所需的windowId

from Quartz import CGWindowListCopyWindowInfo, kCGNullWindowID, kCGWindowListOptionAll

windowName = 'Desktop' # change this to the window you are looking for

def findWindowId():

    windowList = CGWindowListCopyWindowInfo(
        kCGWindowListOptionAll, kCGNullWindowID)

    for window in windowList:
        if(windowName.lower() in window.get('kCGWindowName', '').lower()):
            return window['kCGWindowNumber']

    return None

你可以找到一个完整的例子here

注意:根据我的测试,如果您最小化(cmd + m) 或隐藏(cmd + h) 一个窗口,对它进行截图只会捕捉到它被隐藏之前的那一刻。您需要保持窗口打开以使其工作 - 但可以将其保持在其他窗口后面。在 MacOS 上测试v10.15.7

【讨论】:

  • 如果您不确定这是否适用于最小化的应用程序,那有什么意义呢? OP 要求筛选最小化的应用程序。
  • @ManuelFedele 关键是 OP 在运行时可以work on other things。即使有其他应用程序覆盖它,它也会起作用。我会在答案中更清楚地说明这一点。感谢您的评论!
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多