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); }