La api PrintWindow funciona bien, la utilizo para capturar miniaturas de ventanas ocultas. A pesar del nombre, es diferente de WM_PRINT y WM_PRINTCLIENT, funciona con casi todas las ventanas, excepto Windows Direct X/WPF.
Agregué un código (C#) pero después de revisar cómo usé el código, me di cuenta de que la ventana no está realmente oculta cuando capturo su mapa de bits, simplemente fuera de la pantalla por lo que puede no funcionar para su caso. ¿Podrías mostrar la ventana de la pantalla, hacer una impresión y luego volver a ocultarla?
public static Bitmap PrintWindow(IntPtr hwnd)
{
RECT rc;
WinUserApi.GetWindowRect(hwnd, out rc);
Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
Graphics gfxBmp = Graphics.FromImage(bmp);
IntPtr hdcBitmap = gfxBmp.GetHdc();
bool succeeded = WinUserApi.PrintWindow(hwnd, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
if (!succeeded)
{
gfxBmp.FillRectangle(new SolidBrush(Color.Gray), new Rectangle(Point.Empty, bmp.Size));
}
IntPtr hRgn = WinGdiApi.CreateRectRgn(0, 0, 0, 0);
WinUserApi.GetWindowRgn(hwnd, hRgn);
Region region = Region.FromHrgn(hRgn);
if (!region.IsEmpty(gfxBmp))
{
gfxBmp.ExcludeClip(region);
gfxBmp.Clear(Color.Transparent);
}
gfxBmp.Dispose();
return bmp;
}
interesante, lo he intentado pero me dieron ningún resultado. ¿Puedes publicar algún código o un enlace o algo así? Gracias – cbrulak
Esto no funciona para ventanas minimizadas/ocultas, al menos no en mi caso. Sin embargo, usar 'PrintWindow' mientras la ventana está fuera de pantalla es una buena alternativa. –
Ruud, sí, tienes razón, deberás mostrar la ventana de la pantalla, imprimirla, luego minimizarla nuevamente. –