コード例 #1
0
ファイル: Capturing.cs プロジェクト: jonesm/Step-by-Step
 public static Image Window(IntPtr handle)
 {
     // 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, 0, 0, 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;
 }
コード例 #2
0
ファイル: Capturing.cs プロジェクト: jonesm/Step-by-Step
        public static Image WindowWithMarker(IntPtr handle, User32.POINT marker)
        {
            // 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, 0, 0, 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);

            // Add Marker
            // Create a custom brush using a semi-transparent color, and
            Color customColor = Color.FromArgb(75, Color.Red);
            SolidBrush shadowBrush = new SolidBrush(customColor);
            // Set image as a graphics context
            Graphics graphics = Graphics.FromImage(img);
            // Resolve mouse coords
            int size = 30;
            int x = marker.X - windowRect.left;
            int y = marker.Y - windowRect.top;
            // Create drawing rectangle
            Rectangle rect = new Rectangle(x - (size / 2), y - (size / 2), 30, 30);
            Rectangle crect = new Rectangle(x, y, 30, 30);
            // Draw circle
            graphics.FillEllipse(shadowBrush, rect);
            // Dispose of the brush.
            shadowBrush.Dispose();
            // Draw cursor
            System.Windows.Forms.Cursors.Default.Draw(graphics, crect);
            return img;
        }