Vérifier si DWM / Aero est activé, et ayant ce code en direct dans le même binaire pour 2000 / XP / Vista / 7

StackOverflow https://stackoverflow.com/questions/1317295

  •  19-09-2019
  •  | 
  •  

Question

Je sais que le titre a peu de sens, surtout parce qu'il est difficile d'expliquer en une seule ligne. Voici donc la situation:

J'ai un programme qui est binaire est destiné à Windows 2000 et plus récents. Maintenant, je suis allé de l'avant et ajouté un peu de code pour vérifier si l'utilisateur est en cours d'exécution sous Vista / 7, et si oui, vérifier si Aero / DWM est activé. Sur la base de cela, je vais désactiver certaines choses qui ne sont pas pertinentes pour cette plate-forme particulière, et activer d'autres fonctions. Mon principal problème est que pour appeler DwmIsCompositionEnabled à partir de Visual C ++ 2008 Je dois ajouter le fichier dwmapi.lib et compiler contre. L'exécution du binaire autre chose que Vista ou 7 donne le « Impossible de trouver le composant. L'application n'a pas pu démarrer parce que dwmapi.dll n'a pas été trouvé » erreur. Ceci, bien sûr, devrait se produire puisque DWM est nouvelle et non disponible pour les plates-formes plus anciennes.

Ma question est alors: il sera possible pour moi de gérer en quelque sorte à retirer ceci? Un binaire pour toutes les versions OS et comprennent que le code de vérification de DWM? Ce programme a été écrit sous Visual Studio 2008, Visual C ++ en utilisant MFC.

Était-ce utile?

La solution

Je ne peux S'avère juste dire à l'éditeur de liens delayload le dwmapi.dll.

Je tiens à remercier ewanm89 parce ce qu'il a dit en quelque sorte résonné et m'a conduit sur le chemin de trouver la réponse réelle.

Autres conseils

La solution normale consiste à utiliser LoadLibrary () et GetProcAddress (). Les deux peuvent se faire après votre programme a commencé. Mais encore 1 pour la solution de delayload, qui fait la même chose pour vous dans les coulisses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top