Bitmap bmp = null;
SIZE size;
size.cx = Screen.PrimaryScreen.Bounds.Width;
size.cy = Screen.PrimaryScreen.Bounds.Height;
IntPtr Src = PlatformInvokeUSER32.GetDC(IntPtr.Zero);
IntPtr Dest = PlatformInvokeGDI32.CreateCompatibleDC(Src);
IntPtr HBitmap = (IntPtr)null;
IntPtr hOld = IntPtr.Zero;
HBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(Src, size.cx, size.cy);
hOld = (IntPtr)PlatformInvokeGDI32.SelectObject(Dest, HBitmap);
PlatformInvokeGDI32.BitBlt(Dest, 0, 0, size.cx, size.cy, Src, 0, 0, PlatformInvokeGDI32.SRCCOPY);
PlatformInvokeGDI32.SelectObject(Dest, hOld);
PlatformInvokeGDI32.DeleteDC(Dest);
PlatformInvokeUSER32.ReleaseDC(IntPtr.Zero, Src);
bmp = System.Drawing.Image.FromHbitmap(HBitmap);
PlatformInvokeGDI32.DeleteObject(HBitmap);
return bmp;