Метод Graphics.CopyFromScreen (..) должен делать то, что вам нужно.
Вот хороший пример, который я нашел в Интернете:
http://www.geekpedia.com/tutorial181_Capturing-screenshots-using-Csharp.html
РЕДАКТИРОВАТЬ: Пример кода: (я создал его как метод расширения)
public static class FormExtensions
{
public static void SaveAsImage(this Form form, string fileName, ImageFormat format)
{
var image = new Bitmap(form.Width, form.Height);
using (Graphics g = Graphics.FromImage(image))
{
g.CopyFromScreen(form.Location, new Point(0, 0), form.Size);
}
image.Save(fileName, format);
}
}
можно использовать:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.SaveAsImage("foo.bmp", ImageFormat.Bmp);
}
}