Musimy uruchomić proces z usługi Windows i pobrać z niego zrzut ekranu.Zrzut ekranu procesu w ramach usługi Windows
Wypróbowaliśmy wywołania BitBlt i PrintWindow Win32, ale oba dają puste (czarne) bitmapy.
Jeśli uruchomimy nasz kod z normalnego procesu użytkownika, działa dobrze.
Czy jest to możliwe? Czy może być inna metoda do wypróbowania?
miejsca staraliśmy:
- usługa Windows działa jako system lokalny, uruchamia proces jako Local System -> screenshot nie
- usługi Windows z systemem jako administrator, proces przebiega jako administrator -> screenshot nie powiedzie się.
- Aplikacja Windows działająca jako użytkownik XYZ, uruchamia proces jak XYZ -> screenshot działa zarówno z BitBlt jak i PrintWindow.
- Próbował sprawdzanie „Zezwalaj usłudze na współdziałanie z pulpitem” od systemu lokalnego
Zauważyłem również, że PrintWindow działa lepiej dla naszego przypadku, to działa, jeśli okno jest za innego okna.
W przypadku innych wymagań proces nadrzędny i podrzędny muszą należeć do tego samego użytkownika. Nie możemy naprawdę używać podszywania się z jednego procesu do drugiego.
Czy próbowałeś zezwolić na interakcję usługi z pulpitem? –
Bardzo dobry pomysł, ale też nie działał. Myślę też, że kiedy uruchomiłem go jako Administrator, było to równoważne z robieniem tego. Nie możesz użytkownika i sprawdzić "Pozwól usłudze na interakcję z komputerem" z konsoli zarządzania - jest wyłączona. – jonathanpeppers
Szukanie, zobacz także [Ekran przechwytywania na sesji pulpitu serwera] (http://stackoverflow.com/questions/5200341/capture-screen-on-server-desktop-session/12851218) – Theraot