I have a normal application example (the code is this, but not is a service) that make screenshots of a non secure active desktop created by a 3rd's application.
For example:
https://i.stack.imgur.com/NJoOG.jpg
This 3rd application is a "browser application" that uses CEF to render the websites.
My goal is open a fullscreen form in foreground (covering all screen above) and be able to make screenshot of the content behind of this fullscreen form (the 3rd application).
I searched by some hint about this and found these similar discussions:
How do I capture desktop screenshot behind full screen form?
Screenshot using Magnification API: SetThreadDesktop fails when alternates to a new desktop
I also had tested using PrintWindow api (to capture only the 3rd's application), but this results in a black screen (in chromium content) because probably the 3rd's application uses CEF with hardware acceleration resource active.
For example:
https://i.stack.imgur.com/taMdX.png
All works fine in Windows XP, 7 (disabling Aero theme) - with ALPHABLEND = TRUE on fullscreen Form.
The second discussion found seems more near of solution to my trouble, because this uses a api apparently able to remove a determinated window of screencapture.
I tested this example left by author, works only if call ConfigMag() prodecure after routine that contains SetThreadDesktop api.
Eg:
if InputDesktopSelected then
xGetScreenToBmp(idx)
else if SelectDesktop(nil) then // result of SelectDesktop() is a routine that calls SetThreadDesktop
begin
ConfigMag;
xGetScreenToBmp(idx);
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
Already if i want make screenshots periodically, this will fails like was said by author. Then my trouble still not was solved.