//调用:(传入控件句柄即可)
        public Image CaptureWindow(IntPtr handle)
        {
            IntPtr hdcSrc = User32.GetWindowDC(handle);

            User32.RECT windowRect = new User32.RECT();
            User32.GetWindowRect(handle, ref windowRect);
            int    width   = windowRect.right - windowRect.left;
            int    height  = windowRect.bottom - windowRect.top;
            IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
            IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width - (int)(width * 0.01), height - (int)(height * 0.02));
            IntPtr hOld    = GDI32.SelectObject(hdcDest, hBitmap);

            GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
            GDI32.SelectObject(hdcDest, hOld);
            GDI32.DeleteDC(hdcDest);
            User32.ReleaseDC(handle, hdcSrc);
            Image img = Image.FromHbitmap(hBitmap);

            GDI32.DeleteObject(hBitmap);
            return(img);
        }
Ejemplo n.º 2
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, int xstart, int ystart, int width, int height)
        {
            // get te hDC of the target window
            IntPtr hdcSrc = User32.GetWindowDC(handle);

            // get the size
            User32.RECT 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 = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);
            // select the bitmap object
            IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);

            // bitblt over
            GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, xstart, ystart, 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);

            // free up the Bitmap object
            GDI32.DeleteObject(hBitmap);
            return(img);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Освобождение ресурсов системы.
 /// </summary>
 /// <param name="hBitmap">Указатель на структуру данных.</param>
 /// <param name="hdcSrc">Указатель на структуру данных источника.</param>
 /// <param name="hdcDest">Указатель на структуру данных назначения.</param>
 private void Cleanup(int hBitmap, int hdcSrc, int hdcDest)
 {
     User32.ReleaseDC(User32.GetDesktopWindow(), hdcSrc);
     GDI32.DeleteDC(hdcDest);
     GDI32.DeleteObject(hBitmap);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Получение снимка в формате Windows Bitmap
        /// </summary>
        /// <returns></returns>
        public Bitmap CaptureScreen()
        {
            int hdcSrc  = User32.GetWindowDC(User32.GetDesktopWindow()),
                hdcDest = GDI32.CreateCompatibleDC(hdcSrc),
                hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc,
                                                       GDI32.GetDeviceCaps(hdcSrc, 8), GDI32.GetDeviceCaps(hdcSrc, 10));

            GDI32.SelectObject(hdcDest, hBitmap);
            GDI32.BitBlt(hdcDest, 0, 0, GDI32.GetDeviceCaps(hdcSrc, 8),
                         GDI32.GetDeviceCaps(hdcSrc, 10),
                         hdcSrc, 0, 0, 0x00CC0020);
            Bitmap btm = GetImage(hBitmap);

            Cleanup(hBitmap, hdcSrc, hdcDest);
            return(btm);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///Создание снимка
        /// </summary>
        /// <param name="fileName">Название файла.</param>
        /// <param name="imageFormat">Формат изображения.</param>
        public void CaptureScreen(string fileName, ImageFormat imageFormat)
        {
            int hdcSrc  = User32.GetWindowDC(User32.GetDesktopWindow()),
                hdcDest = GDI32.CreateCompatibleDC(hdcSrc),
                hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc,
                                                       GDI32.GetDeviceCaps(hdcSrc, 8), GDI32.GetDeviceCaps(hdcSrc, 10));

            GDI32.SelectObject(hdcDest, hBitmap);
            GDI32.BitBlt(hdcDest, 0, 0, GDI32.GetDeviceCaps(hdcSrc, 8),
                         GDI32.GetDeviceCaps(hdcSrc, 10),
                         hdcSrc, 0, 0, 0x00CC0020);
            SaveImageAs(hBitmap, fileName, imageFormat);
            Cleanup(hBitmap, hdcSrc, hdcDest);
        }