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

C# 在Windows 7中使用大字体时的奇数dpi设置,c#,.net,winforms,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系统文本大小设置为“较小

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

当使用较大的文本时,屏幕文本的大小明显比任何一个选项都大,因此我知道我已经按照预期更改了系统设置


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

对于遇到相同问题的任何其他人来说,答案似乎是直接从注册表获取:

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