Screen Capture Frustration

E

Eddie Dunn

I have one here that I cannot find anything on in my searching.

I am implementing a screen capture functionality into my Visual Basic
..NET application.

The code I am using calls the bitblt function in gdi32.dll to achieve
its magic as follows:

Public Function CreateScreenshot() As Bitmap

Dim Rect As Rectangle = Screen.PrimaryScreen.Bounds
Dim gDest As Graphics
Dim hdcDest, hdcSrc As IntPtr

CreateScreenshot = New Bitmap(Rect.Right, Rect.Bottom)
gDest = gDest.FromImage(CreateScreenshot)

hdcSrc = GetDC(IntPtr.Zero)
hdcDest = gDest.GetHdc
BitBlt(hdcDest, 0, 0, _
Rect.Right, Rect.Bottom, hdcSrc, 0, 0, SRCCOPY)
gDest.ReleaseHdc(hdcDest)
ReleaseDC(IntPtr.Zero, hdcSrc)

End Function


This code works marvelously HOWEVER.....

This screen capture needs to capture my form (which is opaque) ontop
another form.

I have found that when the opacity for the topmost form is set less
than 100 % it does not show up in my capture.

The interesting thing is that a Ctrl-Alt-Print Screen yields the
opaque form in the resulting capture perfectly.

I have some ideas as to why this might be occuring ( gdi functions not
supporting nifty rendering features like opacity being at the top)

Nothing I have come up with at this point (and my skill levels) lead
me to any obvious solutions

I would rather not use Sendkeys and the clipboard as I feel that this
is shoddy at best.

Anybody have any ideas?


Thanks In Advance



Eddie
 
H

Herfried K. Wagner [MVP]

Eddie Dunn said:
I am implementing a screen capture functionality into my Visual Basic
.NET application.

The code I am using calls the bitblt function in gdi32.dll to achieve
its magic as follows:
[...]
This code works marvelously HOWEVER.....

This screen capture needs to capture my form (which is opaque) ontop
another form.

I have found that when the opacity for the topmost form is set less
than 100 % it does not show up in my capture.

The interesting thing is that a Ctrl-Alt-Print Screen yields the
opaque form in the resulting capture perfectly.

I have some ideas as to why this might be occuring ( gdi functions not
supporting nifty rendering features like opacity being at the top)

Nothing I have come up with at this point (and my skill levels) lead
me to any obvious solutions

Try this sample:

<URL:http://dotnet.mvps.org/dotnet/samples/windowsandforms/downloads/Screens
hot.zip>
 
E

Eddie Dunn

Herfried K. Wagner said:
Eddie Dunn said:
I am implementing a screen capture functionality into my Visual Basic
.NET application.

The code I am using calls the bitblt function in gdi32.dll to achieve
its magic as follows:
[...]
This code works marvelously HOWEVER.....

This screen capture needs to capture my form (which is opaque) ontop
another form.

I have found that when the opacity for the topmost form is set less
than 100 % it does not show up in my capture.

The interesting thing is that a Ctrl-Alt-Print Screen yields the
opaque form in the resulting capture perfectly.

I have some ideas as to why this might be occuring ( gdi functions not
supporting nifty rendering features like opacity being at the top)

Nothing I have come up with at this point (and my skill levels) lead
me to any obvious solutions

Try this sample:

<URL:http://dotnet.mvps.org/dotnet/samples/windowsandforms/downloads/Screens
hot.zip>



Thanks a million! Works Perfectly
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top