Witam!
Potrzebuję pobrać obraz okna, które nie koniecznie jest na wierzchu.
Wcześniej robiłem to +/- tak:
while (!Window.IsActive)
{
Thread.Sleep(100);
}
if (bmpScreenshot == null)
{
Graphics gfxScreenshot;
if (this.InvokeRequired) this.Invoke(new MethodInvoker(delegate() { this.WindowState = FormWindowState.Minimized; }));
else this.WindowState = FormWindowState.Minimized;
Thread.Sleep(200);
bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
gfxScreenshot = Graphics.FromImage(bmpScreenshot);
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
if (this.InvokeRequired) this.Invoke(new MethodInvoker(delegate() { this.WindowState = FormWindowState.Normal; }));
else { this.WindowState = FormWindowState.Normal; }
}
Powyższe rozwiązanie jest dobre, lecz upierdliwe jest strasznie to, że za każdym razem muszę przywrócić okno, które mnie interesuje, na wierzch...
Potem wpadłem na taki pomysł:
Graphics g = Graphics.FromHwnd(WinApi.FindWindow("Nazwa_okna", null));
Bitmap bmpScreenshot = new Bitmap(1400, 900, g);
Ten znowu wyświetlał białą plamę. Przy okazji odkryłem, że można tak rysować po cudzym oknie :D
No więc jak pobrać obraz okna, które jest zminimalizowane?
Pozdrawiam, Wronq!