Johan_
Johan_

Reputation: 440

capture hidden NSWindow

I'm able to capture NSWindows which are visible using code simular to the SonOfGrab Example

But how can I capture a hidden NSWindow? Or what is the way to hide a NSWindow from the user but to still appear in de Windowserver?

Thanks in advance!

Upvotes: 1

Views: 984

Answers (2)

user2067656
user2067656

Reputation: 426

You can do it by:

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

category to 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;
}

Upvotes: 1

vilhalmer
vilhalmer

Reputation: 1159

It isn't possible to capture the contents of an NSWindow which isn't visible on-screen. When a window is minimized/hidden/whatever, the visual representation is dropped to save memory.

(Not sure on exactly how this is managed, feel free to chime in if you have a deeper knowledge of the window system. I only know this from experience, trying to capture windows with CamTwist and BoinxTV.)

Upvotes: 2

Related Questions