2011-10-07 65 views
0

我能捕捉到NSWindow S使用代码simular到SonOfGrab Example捕捉隐藏NSWindow

但我怎么能捕捉到隐藏NSWindow这是可见的?或者,如何隐藏用户的NSWindow,但仍然出现在Windowserver中?

在此先感谢!

回答

1

无法捕获NSWindow的内容,该内容在屏幕上不可见。当一个窗口被最小化/隐藏/无论如何,视觉表示被删除以节省内存。

(不知道这个究竟是如何管理的,随意附和,如果你有窗口系统有更深入的了解。我只是从经验中知道这一点,试图捕捉与CamTwist和BoinxTV窗口。)

0

你可以做到这一点:

NSImage *img = [[NSImage alloc] initWithCGImage:[window windowImageShot] size:window.frame.size]; 

类别NSWindow:

- (CGImageRef)windowImageShot 
{ 
    CGWindowID windowID = (CGWindowID)[self windowNumber]; 
    CGWindowImageOption imageOptions = kCGWindowImageBoundsIgnoreFraming | kCGWindowImageNominalResolution; 
    CGWindowListOption singleWindowListOptions = kCGWindowListOptionIncludingWindow; 
    CGRect imageBounds = CGRectNull; 

    CGImageRef windowImage = CGWindowListCreateImage(imageBounds, singleWindowListOptions, windowID, imageOptions); 

    return windowImage; 
} 
+0

+1,这是邪恶的。 kCGWindowListOptionIncludingWindow可以让你截取一个windowID,即使它不在前面。感谢分享! – Tiago