如何在屏幕截图上忽略我的应用程序窗口?(斯威夫特 2.0) [英] How to ignore my app's window on screenshot? (Swift 2.0)

查看:91
本文介绍了如何在屏幕截图上忽略我的应用程序窗口?(斯威夫特 2.0)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取屏幕图像,忽略我的应用程序窗口.

I wanted to get an image of the screen, ignoring my app's window.

在 Objective-C 中找到一个代码示例并尝试将其转换为 Swift.

Found a code example in Objective-C and tried to convert it to Swift.

Objective-C 被截断:

Objective-C snipped:

// Get onscreen windows
CGWindowID windowIDToExcude = (CGWindowID)[myNSWindow windowNumber];
CFArrayRef onScreenWindows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
CFMutableArrayRef finalList = CFArrayCreateMutableCopy(NULL, 0, onScreenWindows);
for (long i = CFArrayGetCount(finalList) - 1; i >= 0; i--) {
    CGWindowID window = (CGWindowID)(uintptr_t)CFArrayGetValueAtIndex(finalList, i);
    if (window == windowIDToExcude)
            CFArrayRemoveValueAtIndex(finalList, i);
}
// Get the composite image
CGImageRef ref = CGWindowListCreateImageFromArray(myRectToGrab, finalList, kCGWindowListOptionAll);

我在 Swift 中的版本(到目前为止我已经做到了):

My version in Swift (where I managed to get so far):

// Get onscreen windows
let windowIDToExcude = myNSWindow.windowNumber!
let onScreenWindows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID)
let finalList = CFArrayCreateMutableCopy(nil, 0, onScreenWindows)

for var i = CFArrayGetCount(finalList) - 1; i >= 0; i-=1 {
    var window: CGWindowID = (uintptr_t(CFArrayGetValueAtIndex(finalList, i)) as! CGWindowID)
    if window == windowIDToExcude {
        CFArrayRemoveValueAtIndex(finalList, i)
    }
}
// Get the composite image
var ref = CGWindowListCreateImageFromArray(myRectToGrab, finalList, kCGWindowListOptionAll)

但它在 swift 2.0 中不起作用,我不知道为什么.

But it does not work in swift 2.0 and I have no idea why.

特别是这一行无法编译:

Particularly this line can't be compiled:

CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID)

CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID)

显然不再有 CGWindowListCreatekCGWindowListOptionOnScreenOnlykCGNullWindowID 这样的东西.

Apparently there is no such thing as CGWindowListCreate, kCGWindowListOptionOnScreenOnly and kCGNullWindowID anymore.

推荐答案

你能试试这个吗:

let imageRef = CGWindowListCreateImage(self.view.frame, CGWindowListOption.OptionOnScreenBelowWindow, CGWindowID(self.view.window!.windowNumber), CGWindowImageOption.Default)

let image = NSImage(CGImage: imageRef!, size: self.view.frame.size)
self.imageView.image = image

这对我有用.

这篇关于如何在屏幕截图上忽略我的应用程序窗口?(斯威夫特 2.0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆