是否可以使用本机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电话。
答案 0 :(得分:2)
a WMI Query to the Win32_DesktopMonitor class怎么办?
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轴(垂直方向)的分辨率。
您可能会使用to this question:
ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");
foreach (ManagementObject monitor in monitorObjectSearch.Get())
{
Debug.WriteLine(monitor["PixelsPerXLogicalInch");
Debug.WriteLine(monitor["PixelsPerYLogicalInch");
}
还有Windows API Route with GetDeviceCaps,但我读过有some issues with it on Windows 7所以你的里程可能会有所不同。
还有Direct2D GetDesktopDpi(mentioned by Alex),看起来它需要做一些COM Interop调用,可能也可能不干净,只能使用Direct2D可用的Windows版本。 Direct2D和.NET上的一些additional information。
答案 1 :(得分:0)
有api,http://msdn.microsoft.com/en-us/library/windows/desktop/dd371316(v=vs.85).aspx名为getDesktopApi,但我从未使用它。我认为它就像进行任何互操作一样简单。