如何强制高 dpi 缩放?

Ian*_*oyd 27 compatibility accessibility dpi high-dpi

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

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

  • 假设有一个应用程序 Microsoft 应用了“ HighDpiAware”兼容性垫片,而该应用程序确实没有应用。如何强制 dpi 缩放?

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


编辑:什么是高 dpi 缩放?

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

问题是几乎没有开发人员通过很好地处理高 dpi 设置来完成他们的工作。充其量一切都将保持“相同的大小”,这意味着每一个都显得很小。最坏的情况是表单布局不正确,文本被剪切,控件不可见。

从 Windows Vista 开始,并利用桌面组合的强大功能,Microsoft 放弃了开发人员的工作,而现在向应用程序撒谎。它们告诉应用程序用户正在以 96dpi 运行。然后 Windows 使用视频卡和桌面组合来放大表单。

优点表单的内容将是一个很好的可读大小。
缺点:一切都会有点模糊。

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

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

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

的话题如何让你的应用程序尊重用户的喜好(包括字体,字体大小和dpi设置)是一个问题stack overflow。正如声明您的“高 dpi 意识”的清单条目的语法一样。

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

小智 8

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

DPIMangler:博客文章源代码


Sam*_*amB 6

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

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

  • 过去,`.manifest` 文件优先于可执行文件中的清单。今天,可执行文件中内置的任何清单都会覆盖任何外部“.manifest”文件。我不记得是哪个 XP 服务包改变了它 - 我认为它是 SP2。 (3认同)

小智 6

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

但是,请务必在编辑之前制作可执行文件的副本!