The application I am making, a screen magnifier, requires a partly transparent Form to remain visible but to capture part of the screen underneath the Form. This is easy to do in VB.Net using Graphics.CopyFromScreen, but it has one drawback: CopyFromScreen can't "see" other Windows Forms with opacity less than 1 -- in other words, anything with partial transparency. The only other method I know to capture an area of screen, using BitBlt, captures exactly the pixels that are visible on the screen; but this requires the Form to be hidden during capturing. That causes ugly blinking of the magnifier.

Can anyone here think of another way to capture an area of screen "underneath" a visible form? For example, is there some API-based method to capture all the virtual window rectangles that intersect with the area to be captured, and to use that data to build up an image of what would be visible if the Form is hidden?

BB