
Capturing the screen or the surface of a controlThis simple process requires a little bit of interop to provide access to the GDI BitBlt API. First, you need to import the BitBlt, GetDC and ReleaseDC functions. //imports
the GDI BitBlt function that enables the background of the window //to
be captured [DllImport("gdi32.dll")]
private
static extern
bool BitBlt( IntPtr
hdcDest, // handle to destination DC int
nXDest, // x-coord of destination upper-left
corner int
nYDest, // y-coord of destination upper-left
corner int
nWidth, // width of destination rectangle int
nHeight, // height of destination rectangle IntPtr
hdcSrc, // handle to source DC int
nXSrc, // x-coordinate of source upper-left
corner int
nYSrc, // y-coordinate of source upper-left
corner System.Int32
dwRop // raster operation code );
[DllImport("User32.dll")] public
extern static
System.IntPtr GetDC(System.IntPtr hWnd); [DllImport("User32.dll")] public
extern static
int ReleaseDC(System.IntPtr hWnd, System.IntPtr hDC); Now, to capture the screen in it's entirety you can do the following.
System.IntPtr desktopDC=GetDC(System.IntPtr.Zero);
Bitmap bm=new
Bitmap(SystemInformation.VirtualScreen.Width,
SystemInformation.VirtualScreen.Height);
Graphics g=Graphics.FromImage(bm);
System.IntPtr bmDC=g.GetHdc();
BitBlt(bmDC,0,0,bm.Width,bm.Height,desktopDC,0,0,0x00CC0020
/*SRCCOPY*/);
ReleaseDC(System.IntPtr.Zero, desktopDC);
g.ReleaseHdc(bmDC);
g.Dispose(); The Bitmap object BM now contains a screen shot of the entire desktop. To capture an individual control, for example the surface of a PictureBox you can do the following.
System.IntPtr srcDC=GetDC(this.pictureBox1.Handle);
Bitmap bm=new
Bitmap(this.pictureBox1.Width,this.pictureBox1.Height);
Graphics g=Graphics.FromImage(bm);
System.IntPtr bmDC=g.GetHdc();
BitBlt(bmDC,0,0,bm.Width,bm.Height,srcDC,0,0,0x00CC0020
/*SRCCOPY*/);
ReleaseDC(this.pictureBox1.Handle, srcDC);
g.ReleaseHdc(bmDC);
g.Dispose(); Copyright Robert W. Powell 2003. All rights reserved.
|