Jump to content

Some child windows can't be captured


sjd
 Share

Recommended Posts

More of a curiosity than a bug, and I've not chased this down just yet as its not a high priority...

Going through the help source to clean up the HTML and content for grammatical consistency, I note that Limit History dialog and all Effects dialogs can't be captured. Using PSP 4 or PSP 8, I get the dialog borders, but the dialog client area captured is the window (or desktop) underneath.

Its obviously an issue with window ownership or similar.

Rick, can you throw some light on this?

regards

Link to comment
Share on other sites

By the way, the MSDN interview is up on http://msdn.microsoft.com (front page currently). Check it out to see if that's the same problem you're seeing (obviously check out the part of the video that's recorded from the computer, and not the interview).

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

  • 7 months later...

So you're saying that when you do a still screen or AVI screen capture that certain windows don't show up, right?

That's because they are "layered windows", as is the terminology in the Windows Platform SDK documentation. There are separate device contexts which are buffered in different ways in comparison to older versions of windows. In older windows versions, the system wouldn't need to care about what's being rendered on a part of a window that was covered up by a top level window, but that all changed with the ability to have semitransparent windows.

I'll have a poke about in the code and see if its a PDN or a .NET issue

It's not an issue with .NET. Load up winamp 5, set it's transparency to 90% or something and you're capture program will probably omit it from the screen capture. It has to do with how the capture works internally:

So older software that wanted to capture from the screen could do

// C++ code

HDC hdc = GetDC(NULL);

// End C++ code

to get a handle to a device context for the entire screen. Display data could then be copied from this device context to a bitmap, AVI frame, etc. I don't know the exact how and why, but coding a capture program up in this way will exclude any and all layered windows with transparency from the memory image.

So in short it has to do with the fact that the system buffers the display data for those semi-transparent windows differently than for all opaque windows. There are probably some newer capture software applications that deal with this, I'd look around for them if you need one. But from what I've seen, looking at existing capture programs including the one I've written, most capture programs won't get all the transparent windows, since it introduces a far more tricky capture algorithm into the mix.

There are no warranties whatsoever on my plug-ins. Use them at your own risk. You may redistribute them if you'd like, but I'd prefer you just link to the download on my site. Please do not modify and redistribute.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...