Inheritance: IDisposable
示例#1
0
        /// <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;
        }
示例#2
0
 /// <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);
 }