vivek kumar

vivek kumar

  • NA
  • 5
  • 752

snapshot of active screen

Oct 21 2015 6:24 AM
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)