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;

我想知道这是否是一个可以让事情变得更容易的 win api 调用。

4

2 回答 2

2

对 Win32_DesktopMonitor 类的 WMI 查询怎么样?

PixelsPerXLogicalInch

Data type: uint32
Access type: Read-only
Qualifiers: Units (Pixels per Logical Inch) 

沿显示器 x 轴(水平方向)的分辨率。

像素每逻辑英寸

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 Route,但我读过它在 Windows 7 上存在一些问题,因此您的里程可能会有所不同。

还有Direct2D GetDesktopDpiAlex 提到),它看起来需要进行一些 COM 互操作调用,并且可能不那么干净,并且仅适用于 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 回答