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