Pobieranie obrazu okna

0

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!

0

hmmm wyobraz sobie ze chlopaki klepiac windowsa mieli troche oleju w glowie :)
i tak zaprojktowali rysowanie okien, aby obszary niewidoczne sie nie odswiezaly, bo po co tracic czas na rysowanie tego czego nie widac?
teraz sprobuj wyobrazic sobie ze okna zminimalizowanego nie widac (trudne? :D), wiec jesli go nie widac, po co je rysowac?

0

Hmm... To, że ono nie jest odświeżane to jest oczywiste, ale może w pamięci gdzieś ono jest? Chyba, że jest zamalowywane, czy wywalane całkiem. Nie wiem - pytam.

Poza tym może mogę wysłać jakiś komunikat do okna, żeby je zmusić do odświeżenia, ale go nie wywalać na wierzch...

Pozdrawiam, Wronq!

0

Jak się nie ma co się lubi, to się lubi co się ma. ;)
Może zadowoli Cie to: http://www.codeproject.com/KB/cs/CapturingMinimizedWindow.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1