Dans ma demande, je reçois la résolution d'écran avec ce code:Aero manipule-t-il le DPI et la taille de l'écran? Pourquoi?
SystemInformation.PrimaryMonitorSize
Et je reçois le DPI avec ce code:
using (Graphics g = Graphics.FromHdc(NativeMethods.GetDC(IntPtr.Zero)))
{
dpiX = g.DpiX;
dpiY = g.DpiY;
}
Cela fonctionne très bien dans la plupart des situations. Mais lorsque le code s'exécute sur une machine Vista avec Aero activé, et que l'utilisateur a configuré le moniteur pour utiliser un DPI élevé, des résultats bizarres reviennent.
Disons que l'utilisateur a mis la machine pour fonctionner à 1024 x 768 et a le DPI à 144, le code ci-dessus renvoie une résolution de 683 x 512 et un DPI de 96
Toutefois, si Aero est éteint, les résultats reviennent comme je les attendais. Que fait Aero et comment puis-je obtenir la vraie résolution et DPI?
+1 Ceci est tout à fait exact. Microsoft a renoncé à essayer de demander aux développeurs de faire fonctionner correctement leurs applications avec des paramètres dpi autres que 96 dpi. Plutôt que de briser la majorité des applications si l'utilisateur choisit des dpi élevés, les développeurs ont maintenant indiqué qu'ils supportent des dpi élevés. L'utilisateur peut toujours désactiver la mise à l'échelle par programme (clic droit, onglet compatibilité) –