/// <summary> /// Creates an Image object containing a screen shot of a specific window /// </summary> /// <param name="handle">The handle to the window. (In windows forms, this is obtained by the Handle property)</param> /// <returns></returns> public Image CaptureWindow(IntPtr handle, Section section) { // get te hDC of the target window IntPtr hdcSrc = User32.GetWindowDC(handle); // get the size var windowRect = new User32.RECT(); User32.GetWindowRect(handle, ref windowRect); int width = windowRect.right - windowRect.left; int height = windowRect.bottom - windowRect.top; // create a device context we can copy to IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc); // create a bitmap we can copy it to, // using GetDeviceCaps to get the width/height IntPtr hBitmap; if (section == null) { hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height); } else { hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, section.Width, section.Height); } // select the bitmap object IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap); // bitblt over if (section == null) { GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY); } else { GDI32.BitBlt(hdcDest, 0, 0, section.Width, section.Height, hdcSrc, section.X, section.Y, GDI32.SRCCOPY); } // restore selection GDI32.SelectObject(hdcDest, hOld); // clean up GDI32.DeleteDC(hdcDest); User32.ReleaseDC(handle, hdcSrc); // get a .NET image object for it //Image img = Image.FromHbitmap(hBitmap); Image img = Image.FromHbitmap(hBitmap); // free up the Bitmap object GDI32.DeleteObject(hBitmap); return img; }
/// <summary> /// Creates an Image object containing a screen shot of the entire desktop /// </summary> /// <returns></returns> public Image CaptureScreen(Section section) { return CaptureWindow(User32.GetDesktopWindow(), section); }