PrintWindow api iyi çalışıyor, gizli pencereler için küçük resimleri yakalamak için kullanıyorum. Adına rağmen, WM_PRINT ve WM_PRINTCLIENT'den farklıdır, Direct X/WPF pencereleri haricinde hemen hemen her pencerede çalışır.
Bazı kodları (C#) ekledim, ancak kodu nasıl kullandığımı inceledikten sonra, bitmapini yakaladığımda pencerenin aslında gizlenmediğini fark ettim, onun ekranı kapalı olduğundan bu durum sizin durumunuz için çalışmayabilir. Pencereyi ekrandan gösterir misiniz, bir baskı yapıp tekrar gizler misiniz?
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;
}
İlginç burada bir göz, onu denedim ama hiçbir sonuç var. Bir kod veya bir link gönderebilir misin? Teşekkürler – cbrulak
Bu, en azından benim durumumda değil, küçültülmüş/gizli pencereler için çalışmıyor. Ancak, pencere kapalı iken 'PrintWindow' kullanarak ekran iyi bir alternatiftir. –
Ruud, evet haklısınız, pencereyi ekrandan göstermeniz, printwindow, sonra tekrar minimize etmelisiniz. –