以编程方式通过注册表更改dpi设置?

时间:2012-05-26 05:58:17

标签: vb.net nullreferenceexception dpi

我设计了一个包含某些表单的项目。问题是它无法在宽屏幕上正确显示。我已经搜索过它,发现它对dpi = 96正常工作。我想通过vb.net中的注册表更改dpi(不是手动) 这是我使用的代码:

    Dim dpi As Graphics = Me.CreateGraphics
    If (dpi.DpiX <> 96 And dpi.DpiY <> 96) Then
        Dim DPISetting As RegistryKey = My.Computer.Registry.CurrentUser.OpenSubKey("HKEY_CURRENT_USER\Control Panel\Desktop\WindowsMetrics", True)
        DPISetting.SetValue("AppliedDPI", 96) '**
    End If

但是我在**行获得了nullRefrence Exception。你调用的对象是空的。我已经真正研究了很长时间但是找不到问题所在。如果您有任何建议或解决方案,我会非常感激。

1 个答案:

答案 0 :(得分:2)

此设计从根本上被打破。

Your application should not change a global system setting just to work around a bug in the code.这是保证您的用户立即卸载您的应用程序而不再使用它的好方法。如果你很幸运,他们不会告诉他们的朋友。你通常不那么幸运。

为什么不解决实际问题,而不是试图让你的黑客工作?如果您的表单在高(或低)DPI设置下无法正确显示,则需要使其在这些情况下正常工作。这是开发桌面应用程序的一部分 - 确保您的应用程序在异构环境中运行。

为此,您可能会发现这些答案中的建议很有用: