1

ネイティブの win API 呼び出しを使用して、C# からデバイスの DPI を取得することはできますか?

Windowsフォームアプリケーションからdpiを取得する方法を知っており、現在のコードは次のとおりです。

  Graphics g = Graphics.FromImage(new Bitmap(10, 10));

  var scaleX = g.DpiX / 96.0f;
  var scaleY = g.DpiY / 96.0f;

物事を簡単にする勝利API呼び出しであるかどうか疑問に思っていました。

4

2 に答える 2

2

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に関する追加 情報。

于 2013-06-26T17:16:04.960 に答える
0

そのためのAPIがあります.http : //msdn.microsoft.com/en-us/library/windows/desktop/dd371316(v=vs.85).aspxはgetDesktopApiを呼び出しましたが、私はそれを使用したことがありません。相互運用呼び出しを行うのと同じくらい簡単だと思います。

于 2013-06-26T17:19:25.013 に答える