Sytuacja: Mam oprogramowanie, które wykonuje udostępnianie ekranu przez Internet, gdzie jeden użytkownik działa jako prezenter, a inni użytkownicy działają jako widzowie/uczestnicy.C++ - Przechwytywanie ekranu, z wyjątkiem niektórych okien
Poza oknami prezentacji, prezenter ma również zestaw OKNO BEZPŁATNE, które pojawiają się na ekranie (pasek przycisków do rozpoczęcia udostępniania/zaprzestania udostępniania/itp., Okna Skype itp.).
Prezentujący może skonfigurować konfigurację oprogramowania do udostępniania ekranu, aby uczynić te okna niewidoczne (niewidoczne) (tj. Nie pojawią się w udostępnianiu ekranu, które są wysyłane do uczestników, ale zawartość okna za nimi będzie pojawią się na zrzucie ekranu).
Zrzuty ekranu są wysyłane z szybkością około 10 klatek na sekundę lub szybciej.
Pytanie: w jaki sposób mogę programowo przechwycić ekran, z wyjątkiem tych okien, które nie są udostępniane?
Uwagi:
- Ze względu na wyższą wartość klatek na sekundę, nie mogę zminimalizować/zmaksymalizować/set alfa dla tych okien, bo wtedy okna będzie migotać. Aplikacja napisana jest w Win32 C++.
- Używałbym warstwowych okien, ale z powodu funkcji kompozycji pulpitu Windows 7, nie można jej użyć bez użycia komputera (w systemie Windows 8 nie można już używać funkcji DwmEnableComposition, aby czasowo i programowo wyłączyć kompozycję)
- Mogę użyć metody warstwowego okna dla systemu Windows XP/2000/7 itd. I innego podejścia dla systemu Windows 8 (jeśli taki istnieje), choć wolałbym pojedynczy proces, który działa na wszystkich systemach
- Mogę również spróbuj "skomponować" zrzuty ekranu, przechwytując pojedyncze obrazy (na pulpicie, okna, które trzeba przechwycić) i używając ich indeksu Z, aby utworzyć ostateczny obraz, ale z powodu wymaganej liczby klatek na sekundę, ten proces byłoby zbyt wolne.
Wiem, że moje spotkanie z MSFT to dobry przykład, chociaż nie wiem, jak to się robi. – zinking
Dziękuję - są podobne produkty, które to robią (JoinMe lub GTM), spróbuję również to zbadać, ale miałem nadzieję na szybszą odpowiedź. –
Funkcja przechwytywania ekranu zwykle przechwytuje "obszar ekranu nad oknem" zamiast rysowanej zawartości samego okna. Możesz spróbować przechwycić wszystkie widoczne okna najwyższego poziomu i przekomponować je. – Deanna