在Windows 7中使用大字体时的奇数dpi设置

时间:2017-01-10 10:33:14

标签: c# .net winforms

Windows 7,C#,。Net 4.5.2:

在应用程序中,我需要检测当前主机的文本大小的当前系统设置。我(完全披露!)从另一个帖子中捏了下面的代码片段:

        var form = new System.Windows.Forms.Form();
        Graphics gfx = form.CreateGraphics();
        userDPI = (int)gfx.DpiX;

这似乎是解决此问题的常用方法,如果我的Windows系统文本大小设置为"较小字体(默认)",则会将userDPI报告为96.如果我设置了Windows系统文字大小为"中等 - 125%" (然后重新登录)片段将userDPI报告为120(这是96dpi的125%)。到目前为止一切都很好。

但是,如果我将Windows系统文本大小设置为"更大 - 150%",代码片段实际上将userDPI报告为96(绝对不是96dpi的150%!)而是我期望的144的结果。

使用较大文本时的屏幕文本大小显然比任何一种替代方案都要大,所以我知道我已经按预期更改了系统设置。

那么我如何可靠地确定文本大小的当前系统设置?

1 个答案:

答案 0 :(得分:0)

为了遇到同样问题的其他人的利益,答案似乎是直接从注册表中获取:

    userDPI = (int)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Control Panel\Desktop", "LogPixels", 0);