У меня есть нормальный пример приложения (код это , но не является службой), который делает снимки экрана незащищенного активного рабочего стола, созданного приложением третьего лица.
Например:
Это третье приложение является "браузерным приложением", которое использует CEF для визуализации веб-сайтов.
Моя цель - открыть полноэкранную форму на переднем плане (охватывающую весь экран выше) и сделать снимок экрана с содержимым этой полноэкранной формы (3-е приложение).
Я искал какой-то намек на это и нашел подобные вопросы:
Второй найденный вопрос кажется более близким к решению моей проблемы (потому что в основном он использует похожий код). Я протестировал этот пример, оставленный автором, но я попал в ту же ситуацию, что и он.
Я также тестировал с использованием функции PrintWindow
(для захвата только приложения 3-го), но это приводит к черному экрану (с содержанием хрома), потому что, вероятно, приложение 3-го использует CEF с аппаратное ускорение ресурс активен.
Например:
Все отлично работает в Windows XP, 7 (отключение темы Aero) - при ALPHABLEND = TRUE в полноэкранной форме. Тогда что можно сделать, чтобы работать и на Windows 10?
PS: я не хочу скрывать форму - сделать скриншот - снова показать форму.
EDIT:
Сегодня я заметил, что второй пример, найденный здесь в SO, работает, только если вызов ConfigMag()
prodecure после подпрограммы, содержащей SetTheadDesktop()
. Например:
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;
Уже, если я хочу периодически делать скриншоты, это будет неудачно, как сказал автор. Тогда моя проблема еще не была решена.