C# 非活动窗口截屏

 public class CaptureWindows

    {



        public static Bitmap GetWindow(IntPtr hWnd)

        {

            IntPtr hscrdc = GetWindowDC(hWnd);

            Rectangle rect = new Rectangle();

            GetWindowRect(hWnd, out rect);

            IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, rect.Width - rect.X, rect.Height - rect.Y);

            IntPtr hmemdc = CreateCompatibleDC(hscrdc);

            SelectObject(hmemdc, hbitmap);

            PrintWindow(hWnd, hmemdc, 0);

            Bitmap bmp = Bitmap.FromHbitmap(hbitmap);

            DeleteDC(hscrdc);

            DeleteDC(hmemdc);

            return bmp;

        }







        [DllImport("gdi32.dll")]

        public static extern IntPtr CreateDC(

         string lpszDriver,        // driver name

         string lpszDevice,        // device name

         string lpszOutput,        // not used; should be NULL

         IntPtr lpInitData  // optional printer data

         );

        [DllImport("gdi32.dll")]

        public static extern int 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

         UInt32 dwRop  // raster operation code

         );



        [DllImport("gdi32.dll")]

        public static extern IntPtr CreateCompatibleDC(

         IntPtr hdc // handle to DC

         );



        [DllImport("gdi32.dll")]

        public static extern IntPtr CreateCompatibleBitmap(

         IntPtr hdc,        // handle to DC

         int nWidth,     // width of bitmap, in pixels

         int nHeight     // height of bitmap, in pixels

         );



        [DllImport("gdi32.dll")]

        public static extern IntPtr SelectObject(

         IntPtr hdc,          // handle to DC

         IntPtr hgdiobj   // handle to object

         );



        [DllImport("gdi32.dll")]

        public static extern int DeleteDC(

         IntPtr hdc          // handle to DC

         );



        [DllImport("user32.dll")]

        public static extern bool PrintWindow(

         IntPtr hwnd,               // Window to copy,Handle to the window that will be copied. 

         IntPtr hdcBlt,             // HDC to print into,Handle to the device context. 

         UInt32 nFlags              // Optional flags,Specifies the drawing options. It can be one of the following values. 

         );



        [DllImport("user32.dll")]

        public static extern IntPtr GetWindowDC(

         IntPtr hwnd

         );



        [DllImport("user32.dll", EntryPoint = "GetWindowRect")]

        private static extern int GetWindowRect(IntPtr hwnd, out   Rectangle lpRect);

    }

 

你可能感兴趣的:(C#)