Снимок экрана на основе Windows Magnification API завершается неудачно в 64-разрядной версии Windows 7 с отключенной темой Aero - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь сделать снимок экрана рабочего стола с помощью Windows Magnification API на основе примера кода, приведенного в https://www.codeproject.com/Articles/607288/Screenshot-using-the-Magnification-library?msg=5570528#xx5570528xx.

Программа (32-битный исполняемый файл) работает довольно хорошо в Windows8 и Windows10, но не работает в ОС Windows7. Я скомпилировал программу в 64-битную версию, и поведение такое же, даже для примера программы, упомянутой в приведенном выше потоке codeproject .

После отладки я выяснил, что функция MagImageScalingCallback возвращает ширину и высоту изображения как 4 * 4 вместо размера моего монитора, что приводит к сбою программы или захвату пустого экрана на компьютерах с Windows7 (ссылка: https://docs.microsoft.com/en-us/windows/desktop/api/magnification/ns-magnification-tagmagimageheader).

Все вызовы API ( MagInitialize , CreateWindow, MagSetWindowFilterList & MagSetWindowSource ) выполнены успешно. В потоке кода отсутствуют сбои или ошибки вызова API с точки зрения инициализации создания, настройки области рабочего стола и назначения списка фильтров.

DWM (тема Aero) отключена (согласно ссылке: https://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification-magsetimagescalingcallback)

Я не смог найти ресурсов, связанных с этой темой, даже после исследования в течение примерно 3 дней. Я должен использовать API увеличения, потому что мне нужно захватывать окна, которые находятся за другими окнами на рабочем столе.

Буду признателен за любую помощь.

Обновление 1:

Я понял, что приложение может захватывать экран только при включенной теме Aero, что противоречит утверждению https://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification-magsetimagescalingcallback.

Я не уверен, как заставить его работать в операционных системах с отключенной или недоступной темой Aero по умолчанию.

...