Win32_DesktopMonitor クラスへの WMI クエリはどうでしょうか。
PixelsPerXLogicalInch
Data type: uint32
Access type: Read-only
Qualifiers: Units (Pixels per Logical Inch)
モニターの x 軸 (水平方向) に沿った解像度。
PixelsPerYLogicalInch
Data type: uint32
Access type: Read-only
Qualifiers: Units (Pixels per Logical Inch)
モニターの Y 軸 (垂直方向) に沿った解像度。
この質問のように使用できます。
ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");
foreach (ManagementObject monitor in monitorObjectSearch.Get())
{
Debug.WriteLine(monitor["PixelsPerXLogicalInch");
Debug.WriteLine(monitor["PixelsPerYLogicalInch");
}
GetDeviceCaps を使用した Windows API ルートもありますが、Windows 7 ではいくつかの問題があることを読んだので、走行距離が異なる場合があります。
Direct2D GetDesktopDpi ( Alex が言及)もあります。これは、いくつかの COM Interop 呼び出しを実行する必要があるように見えますが、クリーンである場合とそうでない場合があり、Direct2D が利用可能な Windows バージョンでのみ動作します。Direct2Dと .NETに関する追加 情報。