Определить, использует ли окно графический интерфейс с аппаратным ускорением - PullRequest
3 голосов
/ 31 мая 2019

Я использую BitBlt функцию winapi, чтобы сделать снимок экрана данного окна, даже если окно частично перекрыто.
У меня уже все работает нормально, за исключением того, что в Windows 10 для некоторых окон (например, браузера Edge) скриншот получается полностью черным.

Ряд других вопросов согласен с тем, что эта проблема связана с использованием графического контекста с аппаратным ускорением в этих окнах.

Очевидно, что библиотека GDI несовместима с графическим контекстом такого рода, поэтому необходимо использовать другую библиотеку.

Мой вопрос конкретно о , как определить, использует ли окно графический контекст, несовместимый с библиотекой GDI .

Если я смог обнаружить это, то я могу выбрать, какую библиотеку использовать для правильной записи снимка экрана (GDI, ActiveX или другие).

В противном случае, единственный способ обнаружить это - сканировать снимок экрана попиксельно, чтобы убедиться, что он полностью черный. Затем, используя другой метод захвата, пока я не получу контент на скриншоте.
Но это звучит как ужасное решение.

1 Ответ

0 голосов
/ 08 июня 2019

У меня уже все работает нормально, за исключением того, что в Windows 10 для некоторых окон (например, браузера Edge) скриншот получается полностью черным.

Вы можете использовать DwmRegisterThumbnail для захвата скрытых / перекрывающихся окон, в частности UWP (например, Edge, Calc и т. Д.)

Я использую его в Windows 10 без проблем (+ D3D для сохранения растрового изображения)

...