Проверка, включен ли DWM / Aero, и наличие этого кода в одном и том же двоичном файле для 2000 / XP / Vista / 7 - PullRequest
1 голос
/ 23 августа 2009

Я знаю, что название не имеет большого смысла, в основном потому, что его трудно объяснить одной строкой. Итак, вот ситуация:

У меня есть программа, бинарная версия которой предназначена для Windows 2000 и новее. Теперь я добавил код, чтобы проверить, работает ли пользователь под Vista / 7, и если да, то проверьте, включен ли Aero / DWM. Исходя из этого, я отключу некоторые вещи, которые не имеют отношения к конкретной платформе, и включу некоторые другие функции. Моя главная проблема заключается в том, что для вызова DwmIsCompositionEnabled из Visual C ++ 2008 мне нужно добавить файл dwmapi.lib и скомпилировать его. Запуск бинарного файла в любом другом месте, кроме Vista или 7, приводит к ошибке «Невозможно найти компонент. Не удалось запустить приложение, так как dwmapi.dll не был найден». Это, конечно, ожидается, так как DWM является новым и недоступным для старых платформ.

Тогда у меня вопрос: смогу ли я как-нибудь справиться с этим? Один двоичный файл для всех версий ОС И включить этот код проверки DWM? Эта программа была написана под Visual Studio 2008, Visual C ++ с использованием MFC.

Ответы [ 2 ]

2 голосов
/ 23 августа 2009

Оказывается, я могу просто сказать компоновщику задержать загрузку dwmapi.dll.

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

1 голос
/ 24 августа 2009

Нормальным решением является использование LoadLibrary () и GetProcAddress (). И то, и другое можно сделать после запуска вашей программы. Но все равно +1 для решения DelayLoad, которое делает то же самое для вас за кулисами.

...