PrintWindow (user32)
Last changed: -91.134.247.202

.
Summary
The PrintWindow function copies a visual window into the specified device context (DC), typically a printer DC.

C# Signature:

   [DllImport("User32.dll", SetLastError = true)]
   [return: MarshalAs(UnmanagedType.Bool)]
   static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);

VB Signature:

<DllImport("User32.dll", SetLastError:=True)> _
Private Shared Function PrintWindow(hwnd As IntPtr, hDC As IntPtr, nFlags As UInteger) As Boolean
End Function

User-Defined Types:

None.

Notes:

This function is only available on Windows XP or higher. Windows 2000/9x/ME do not support it.

Tips & Tricks:

To capture only the client area of window, use PW_CLIENTONLY = 0x1 as nFlags

Sample Code:

Screenshotting a form to a Bitmap in C#:

Graphics g = form.CreateGraphics();
Bitmap bmp = new Bitmap(form.Size.Width, form.Size.Height, g);
Graphics memoryGraphics = Graphics.FromImage(bmp);
IntPtr dc = memoryGraphics.GetHdc();
bool success = PrintWindow(form.Handle, dc, 0);
memoryGraphics.ReleaseHdc(dc);
// bmp now contains the screenshot

Me.AutoRedraw = True
PrintWindow Me.hWnd, Me.hDC, 0

Alternative Managed API:

Control.DrawToBitmap()

Or call Control.InvokePaintBackground() followed by Control.InvokePaint().

Documentation
PrintWindow on MSDN