在Mac上截取特定应用程序窗口的屏幕截图

时间:2014-02-22 00:03:57

标签: macos quartz-graphics

我试图制作一个屏幕投射应用程序,它会投射单个应用程序窗口而不是整个屏幕。首先,我尝试使用Xcode在我的mac上截取单个应用程序的简单屏幕截图。

到目前为止,我试图利用CGWindowListCreateImage,但我遇到了问题。

修改 所以这是我如何设法获得WindowID的一个小例子。之后使用它截取屏幕截图非常简单。 首先,为事件添加全局监视器,更具体地说是NSMouseEvents。我用鼠标了。窗口信息存储在鼠标事件中。

    CGWindowID windowID = (CGWindowID)[event windowNumber];

然后你可以使用下面的代码截取应用程序的屏幕截图,没有阴影等。

CGImageRef image = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, self.WindowID, kCGWindowImageBoundsIgnoreFraming);

如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:6)

所以这是我如何设法获得WindowID的一个小例子。之后使用它拍摄截图非常简单。首先,为事件添加全局监视器,更具体地说是NSMouseEvents。我用鼠标了。窗口信息存储在鼠标事件中。

CGWindowID windowID = (CGWindowID)[event windowNumber];

然后你可以使用下面的代码截取应用程序的屏幕截图,没有阴影等。

CGImageRef image = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, self.WindowID, kCGWindowImageBoundsIgnoreFraming);

如果您需要更多信息,请与我们联系。

答案 1 :(得分:1)

根据用户3339357的答案,在Swift 3中

let gImage = CGWindowListCreateImage(
      CGRect.null,
      CGWindowListOption.optionIncludingWindow,
      CGWindowID(window.windowNumber),
      CGWindowImageOption.bestResolution)

let image = NSImage(cgImage: cgImage!, size: window.frame.size)