简洁版本

简洁版本

简洁版本

我如何强制应用程序进行高 dpi 缩放?

  • 假设有一个应用程序,其开发人员将其表现为高 DPI 感知,但实际上并非如此。我如何强制 DPI 缩放?

  • 假设某个应用程序已应用 Microsoft 的“ HighDpiAware”兼容性补丁,但实际上并未应用。我如何强制进行 dpi 缩放?

我如何强制 Windows 对应用程序应用 dpi 缩放?

长版本:什么是高 dpi 缩放?

并非所有用户都以 96dpi 运行 Windows。并非每个按钮都应为 75x23 像素,并非每个工具栏都为 25 像素高,也并非每个树形视图字形都是 16x16。如果用户为 Windows 选择了不同的 dpi 设置,则需要适当缩放所有内容。

问题是几乎没有开发人员能够很好地处理高 dpi 设置。

  • 最好的情况下,所有东西都会保持“相同大小”,这意味着所有东西看起来都非常小
  • 最糟糕的是,表格布局不正确,文本被剪切,并且控件不可见。

从 Windows Vista 开始,微软利用桌面合成器的功能,不再让开发人员做他们的工作,而是欺骗应用程序。他们告诉应用程序用户正在以 的速度运行+96dpi。然后,Windows 使用视频卡和桌面合成器来放大表格。

优点:表单的内容将具有易于阅读的大小。
缺点:一切都会变得有些模糊。

此“高 dpi 缩放”功能仅由用户自行决定是否起作用,并且需要:

  • Windows Vista 或更高版本
  • 桌面组合功能已启用
  • 用户关闭“使用 Windows XP 样式缩放”
  • 用户不要禁用应用程序的缩放功能

作为开发人员,您可以选择退出高 DPI 缩放;如果您花了精力正确编写应用程序,并且您知道您将正确处理高 DPI。您可以通过在可执行文件中添加清单条目来选择退出此缩放,声明您是“高 DPI 感知“。

主题如何让你的应用程序尊重用户的偏好(包括字体、字体大小和 dpi 设置)是一个问题stack overflow。声明你的“高 DPI 意识“。

问题,关于超级用户,是如何忽略开发人员直接添加了高 DPI 感知清单条目,而实际上应用程序不是高 DPI 感知。他们告诉 Windows 禁用缩放,但他们实际上并没有测试该应用程序。软件带有“高 dpi 感知”清单条目,现在应用程序在“大字体”(例如 120 dpi)下无法使用。

答案1

嗯。我的建议是编辑清单并删除不正确的声明。并且不要忘记尽你所能向开发人员提出这个问题!

编辑:请注意,应该可以简单地将清单放在可执行文件旁边,例如,对于foo.exe,您可以将清单放在 中foo.exe.manifest。请参阅MSDN 文章(查看“文件名语法”部分)。

答案2

我刚刚发布了一个 DLL,用于挂接并重定向对 SetProcessDPIAware 的调用。对于那些通过代码禁用 DPI 缩放的应用程序,这是一个快速而简单的修复方法(与二进制修补相比)。

DPIMangler:博客文章源代码

答案3

您仍然可以编辑清单,只需在 .EXE 文件本身中编辑它即可。寻找具有清单支持的资源编辑器。具有基本支持的示例是 XN 资源编辑器。)只需找到并删除提及 HIGHDPIAWARE 的行并保存可执行文件即可。

不过,在编辑之前,一定要复制一份可执行文件!

答案4

我想知道 ResizeEnable 是否是您所寻找的?

http://www.digitallis.co.uk/pc/ResizeEnable/

相关内容