Нужно получить картинку окна по хендлу, нашел вот такой код, который это делает:
[Flags]
private enum DrawingOptions
{
PRF_CHECKVISIBLE = 0x00000001,
PRF_NONCLIENT = 0x00000002,
PRF_CLIENT = 0x00000004,
PRF_ERASEBKGND = 0x00000008,
PRF_CHILDREN = 0x00000010,
PRF_OWNED = 0x00000020
}
private const int WM_PRINT = 0x0317;
private const int WM_PRINTCLIENT = 0x0318;
[DllImport("user32.dll")]
private static extern int SendMessage (IntPtr hWnd, int msg,
IntPtr dc, DrawingOptions opts);
private void button1_Click(object sender, System.EventArgs e)
{
using (Bitmap bm = new Bitmap(Width + 2, Height + 2))
{
using (Graphics g = Graphics.FromImage(bm))
{
IntPtr dc = g.GetHdc();
try
{
SendMessage(Handle, WM_PRINT, dc,
DrawingOptions.PRF_CHILDREN |
DrawingOptions.PRF_CLIENT |
DrawingOptions.PRF_NONCLIENT);
}
finally
{
g.ReleaseHdc(dc);
}
bm.Save("bm.png");
}
}
}
Но тут размеры окна уже известны, а я их не знаю (окно другого приложения).