Not sure i understand your request maybe this what you search.
Code
public static class ScreenHelper
{
[DllImport("gdi32.dll", CharSet = CharSet.Unicode)]
internal static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);
[DllImport("gdi32.dll", EntryPoint = "BitBlt", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool BitBlt([In] IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, [In] IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
[DllImport("gdi32.dll")]
internal static extern bool DeleteDC([In] IntPtr hdc);
private const int SRCCOPY = 0x00CC0020;
public static Bitmap CaptureScreen(int screenNumber)
{
Rectangle bounds = GetBounds(screenNumber);
Bitmap screen = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppPArgb);
using (Graphics g = Graphics.FromImage(screen))
{
IntPtr destDeviceContext = g.GetHdc();
IntPtr srcDeviceContext = CreateDC("DISPLAY", null, null, IntPtr.Zero);
BitBlt(destDeviceContext, 0, 0, bounds.Width, bounds.Height, srcDeviceContext, bounds.X,
bounds.Y, SRCCOPY);
DeleteDC(srcDeviceContext);
g.ReleaseHdc(destDeviceContext);
}
return screen;
}
public static Rectangle GetBounds(int screenNumber)
{
return Screen.AllScreens[screenNumber].Bounds;
}
}