私のアプリケーションでは、次のコードで画面解像度を取得します。
SystemInformation.PrimaryMonitorSize
そして、私はこのコードでDPIを取得します:
using (Graphics g = Graphics.FromHdc(NativeMethods.GetDC(IntPtr.Zero)))
{
dpiX = g.DpiX;
dpiY = g.DpiY;
}
これはほとんどの状況で正常に機能します。ただし、AeroがオンになっているVistaマシンでコードを実行し、ユーザーが高DPIを使用するようにモニターを設定すると、奇妙な結果が返されます。
ユーザーがマシンを1024x768で実行するように設定し、DPIを144に設定したとすると、上記のコードは683x512の解像度と96のDPIを返します。
ただし、Aeroをオフにすると、期待どおりの結果が返されます。Aeroは何をしていて、どうすれば真の解像度とDPIを取得できますか?