Я пытаюсь сделать снимок экрана рабочего стола с помощью 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 по умолчанию.