Вот код, который я давно написал на C # для приложения для захвата экрана. Он использует функцию Win32 GetWindowRect, чтобы получить границы окна, которое вы хотите захватить, создать растровое изображение с этим размером, а затем использовать функцию Win32 PrintWindow, чтобы попросить окно напечатать себя на этом растровом изображении:
RECT lRectangle = new RECT();
if (!GetWindowRect(lWindow.HWnd, ref lRectangle))
{
MessageBox.Show(this, "An error occured while measuring the selected window.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
fCapturedImage = new Bitmap(lRectangle.Right - lRectangle.Left, lRectangle.Bottom - lRectangle.Top, PixelFormat.Format32bppArgb);
using (Graphics lGraphics = Graphics.FromImage(fCapturedImage))
{
HDC lHdc = lGraphics.GetHdc();
PrintWindow(lWindow.HWnd, lHdc, 0);
lGraphics.ReleaseHdc(lHdc);
}