Screenshots von transparenten Formularen

Hallo Experten!

Ich scheitere bei dem Versuch einen Screenshot eines Formulares hinzukriegen, bei welchem die Deckkraft (Opacity) eingestellt wird. Also einen Screenshot von halbdurchlässigen Formularen…

Den Screenshot erzeuge ich zur Zeit folgendermaßen:

[DllImport("gdi32.dll", SetLastError=true)]
 private static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
 int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc,
 int dwRop);

 [DllImport("gdi32.dll", SetLastError=true)]
 private static extern IntPtr CreateDC(string lpszDriver, string lpszDevice,
 string lpszOutput, IntPtr lpInitData);

 private static int SRC\_COPY = 0x00CC0020;



public static Bitmap Screenshot()
 {
 IntPtr scrDC = CreateDC("DISPLAY", null, null, (IntPtr)null);
 Graphics grpScr = Graphics.FromHdc(scrDC);

 Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
 Screen.PrimaryScreen.Bounds.Height, grpScr);

 Graphics grpBmp = Graphics.FromImage(bmp);
 IntPtr bmpDC = grpBmp.GetHdc();

 if (BitBlt(bmpDC, 0, 0, Screen.PrimaryScreen.Bounds.Width, 
 Screen.PrimaryScreen.Bounds.Height, scrDC, 0, 0, SRC\_COPY) == 0)
 {
 grpBmp.ReleaseHdc(bmpDC);
 grpScr.ReleaseHdc(scrDC);
 throw new Exception();
 }

 grpBmp.ReleaseHdc(bmpDC);
 grpScr.ReleaseHdc(scrDC);
 return bmp;
 }

Bei „normalen“ Formularen funktioniert das auch gut. Wenn die Opacity eingestellt wird, bekomme ich immer den dahinterliegenden Fensterbereich (also einen Screenshot als wäre das Formular gar nicht zu sehen)…

Bin mal gespannt ob Ihr dazu eine Idee oder Lösung habt.

Schon mal Danke,
Patrick