Недавно я нашел код, чтобы сделать снимок экрана активного окна. На самом деле это работает, но изображение немного слишком велико, оно немного выходит за границы текущего окна.Скриншот активного окна за пределами границ
Это скриншот взят с моей программой:
Это скриншот взят с альт + PrintScreen:
Это мой класс:
public static class Screenshotter
{
[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
public static void MakeScreenshot()
{
var foregroundWindowsHandle = GetForegroundWindow();
var rect = new RECT();
GetWindowRect(foregroundWindowsHandle, out rect);
Rectangle bounds = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);
Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
bmp.Save("test.png", ImageFormat.Png);
}
}
Я просто хочу он скриншоты активного окна, а не немного за окном. Я надеюсь, что кто-то может мне помочь :)
Мне любопытно, в чем цель 'CursorPosition'? – tnw
О, вау, нет никакой цели, я просто вижу это. –
Учет границ размеров вашего окна: http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation(v=vs.110).aspx – Aybe