Pobieranie obrazu okna

Pobieranie obrazu okna
Wronq
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam!

Potrzebuję pobrać obraz okna, które nie koniecznie jest na wierzchu.
Wcześniej robiłem to +/- tak:

Kopiuj
            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ł:

Kopiuj
     
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!

massther
  • Rejestracja: dni
  • Ostatnio: dni
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?

Wronq
  • Rejestracja: dni
  • Ostatnio: dni
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!

AN
  • Rejestracja: dni
  • Ostatnio: dni
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.