Я думаю, что утилита захвата экрана, которая поставляется с моим приложением BugTracker.NET с открытым исходным кодом, обладает нужной вам функциональностью или довольно близка к ней.
См. http://ifdefined.com/blog/post/Screen-capture-utility-in-C-NET.aspx о том, как выглядит утилита захвата экрана. Код для задержки выглядит следующим образом: главное окно сначала скрывается, а затем запускает саму себя, чтобы выполнить фактическую задержку и захват. Загрузите BugTracker.NET, и вы получите полный исходный код приложения для захвата экрана.
void buttonCapture_Click(object sender, Exception e)
{
this.Hide();
BeginInvoke(new SimpleDelegate(CaptureForeground));
}
private void CaptureForeground()
{
// delay...
System.Threading.Thread.Sleep(500 + (1000 * (int)numericUpDownDelay.Value));
// Get foreground window rect using native calls
IntPtr hWnd = GetForegroundWindow();
RECT rct = new RECT();
GetWindowRect(hWnd, ref rct);
Rectangle r = new Rectangle();
r.Location = new Point(rct.Left, rct.Top);
r.Size = new Size(rct.Right - rct.Left, rct.Bottom - rct.Top);
CaptureBitmap(r);
this.Show();
}
private void CaptureBitmap(Rectangle r)
{
bitmap = new Bitmap(r.Width, r.Height);
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(r.Location, new Point(0, 0), r.Size);
}
}
}