В моем приложении, я получаю разрешение экрана с этим кодом:ли Aero манипулирует DPI и размером экрана? Зачем?
SystemInformation.PrimaryMonitorSize
И я получаю DPI с этим кодом:
using (Graphics g = Graphics.FromHdc(NativeMethods.GetDC(IntPtr.Zero)))
{
dpiX = g.DpiX;
dpiY = g.DpiY;
}
Это прекрасно работает в большинстве случаев. Но когда код запускается на машине Vista с включенным Aero, и пользователь установил, что монитор использует высокий DPI, приходят неожиданные результаты.
Допустим, пользователь настроил машину для запуска в 1024 х 768 и имеет DPI на 144, приведенный выше код будет возвращать разрешение 683 х 512 и ДОИ 96.
Однако, если Aero выключается, результаты возвращаются, как я ожидал бы их. Что делает Aero и как я могу получить истинное разрешение и DPI?
+1 Это точно. Microsoft отказалась от попыток попросить разработчиков заставить свои приложения работать правильно с настройками dpi, отличными от 96 точек на дюйм. Вместо того, чтобы большинство приложений прерывалось, если пользователь выбирает high-dpi, разработчики теперь указывают, что они поддерживают high-dpi. Пользователь по-прежнему может отключить масштабирование для каждой программы (щелчок правой кнопкой мыши, вкладка совместимости) –