我试图制作一个屏幕投射应用程序,它会投射单个应用程序窗口而不是整个屏幕。首先,我尝试使用Xcode在我的mac上截取单个应用程序的简单屏幕截图。
到目前为止,我试图利用CGWindowListCreateImage
,但我遇到了问题。
修改 所以这是我如何设法获得WindowID的一个小例子。之后使用它截取屏幕截图非常简单。 首先,为事件添加全局监视器,更具体地说是NSMouseEvents。我用鼠标了。窗口信息存储在鼠标事件中。
CGWindowID windowID = (CGWindowID)[event windowNumber];
然后你可以使用下面的代码截取应用程序的屏幕截图,没有阴影等。
CGImageRef image = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, self.WindowID, kCGWindowImageBoundsIgnoreFraming);
如果您需要更多信息,请与我们联系。
答案 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)