Exemple #1
0
        public static Rectangle GetExtendedFrameBounds(IntPtr windowHandle)
        {
            var rect = new WinApi.RECT();

            if (DwmGetWindowAttribute(windowHandle, DWMWA_EXTENDED_FRAME_BOUNDS, ref rect, (UInt32)Marshal.SizeOf(typeof(WinApi.RECT))) != 0)
            {
                // fallback
                WinApi.GetWindowRect(windowHandle, out rect);
            }

            return(new Rectangle(rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1));
        }
        private static Bitmap GetWindowBitmap(IntPtr handle)
        {
            WinApi.GetWindowRect(handle, out var rect);
            var bounds  = new Rectangle(rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1);
            var bounds2 = DesktopWindowManager.GetExtendedFrameBounds(handle);

            bounds = bounds2;

            var bitmap = new Bitmap(bounds.Width, bounds.Height);

            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.CopyFromScreen(bounds.Left, bounds.Top, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
            }

            return(bitmap);
        }