2
Reply

snapshot of active screen

vivek kumar

vivek kumar

Oct 21 2015 6:24 AM
414
While taking snapshot of active screen through code multiple time size of image vary.
 
Please, suggest me solution how to take screenshot of active screen without any loss in size.
 
public class ScreenCapture
{
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetDesktopWindow();

[StructLayout(LayoutKind.Sequential)]
private struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}

[DllImport("user32.dll")]
private static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect);

public static Image CaptureDesktop()
{
return CaptureWindow(GetDesktopWindow());
}

public static Bitmap CaptureActiveWindow()
{
return CaptureWindow(GetForegroundWindow());
}

public static Bitmap CaptureWindow(IntPtr handle)
{
var rect = new Rect();
GetWindowRect(handle, ref rect);
var bounds = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);
var result = new Bitmap(bounds.Width, bounds.Height);

using (var graphics = Graphics.FromImage(result))
{
graphics.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}

return result;
}
Thanks!

Answers (2)