是否可以使用本机 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 调用。
对 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 GetDesktopDpi(Alex 提到),它看起来需要进行一些 COM 互操作调用,并且可能不那么干净,并且仅适用于 Direct2D 可用的 Windows 版本。有关 Direct2D 和 .NET 的一些附加 信息。
有 api, http: //msdn.microsoft.com/en-us/library/windows/desktop/dd371316 (v=vs.85).aspx称为 getDesktopApi,但我从未使用过它。我认为这就像进行任何互操作调用一样简单。