如何强制进行高dpi缩放?


27

如何强制将应用程序缩放为高dpi?

  • 假装有一个应用程序,开发人员将其显示为具有高dpi感知能力,而实际上却不是。如何强制进行dpi缩放?

  • 假装有一个应用程序HighDpiAware,当应用程序实际上不是真正的Microsoft时,Microsoft已应用了“ ”。如何强制进行dpi缩放?

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


编辑:什么是高dpi缩放?

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

问题在于,几乎没有开发人员能够很好地处理高dpi设置,从而无法完成工作。最好的情况下,所有东西都将保持“相同大小”,这意味着每个东西看上去都很。在最坏的情况下,表单的布局不正确,文本会被剪切,并且控件不可见。

从Windows Vista开始,并利用Desktop Composition的功能,Microsoft放弃了从事其工作的开发人员,而现在只依靠应用程序。他们告诉应用程序用户正在以96dpi运行。然后,Windows使用视频卡和“桌面合成”来放大表格。

优点表格的内容可读性好。
缺点:一切都会有些模糊。

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

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

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

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

对于超级用户问题是如何忽略开发人员并继续添加高dpi感知清单清单的开发人员,而实际上该应用程序不是高dpi感知。他们告诉Windows禁用缩放功能,但实际上并未测试该应用程序。那里带有“高dpi感知”清单清单的软件,现在该应用程序在“大字体”(例如120dpi)下无法使用。


我也对此感兴趣。我们有一个不支持dpi的关键应用程序,最初是为800x600屏幕设计的。Windows默认情况下不会缩放它,无论我们使用的是XP,Vista还是7,这都没有影响。由于我们的员工大部分时间都花在此800x600应用程序中,因此他们坚持使用20英寸液晶显示器在800x600分辨率下!这是一个巨大的浪费,当他们需要使用MS Office,IE8等时,自身造成的像素不足便会受到影响
Miles Erickson 2010年

1
直到Windows Vista,Microsoft才开始利用Desktop Composition(有时被错误地称为Aero)来使用图形卡来缩放不专门选择不进行缩放的应用程序。XP中没有缩放功能,而您不想在Vista 7中缩放。您希望正确编写应用程序。走到开发人员的机器上,然后将其分辨率改回1050,并将dpi设置为168。除了应用程序无法正常运行外,其他所有模式都将在拖曳模式下进行相同的巨大缩放。告诉他们在固定之前他们没有得到任何食物或水。
伊恩·博伊德

我们并不总是有权访问创建我们使用的应用程序的开发人员。如果我们做到了……
Cylindric

形式=形状?
jiggunjer

Answers:


5

嗯 我的建议是编辑清单并删除不正确的声明。而且不要忘了给开发人员打扰,但是可以!

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


我认为这是唯一的方法。不利的一面是:它使应用程序的数字签名无效。
伊恩·博伊德

@Ian:它看起来像你不要把清单中的资源。
SamB

3
过去,.manifest文件优先于可执行文件中的清单。今天,可执行文件中内置的任何清单都将覆盖任何外部.manifest文件。我不记得XP的哪个Service Pack更改了它-我认为它是SP2。
伊恩·博伊德

8

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

DPIMangler:博客文章源代码


6

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

不过,请务必在执行前复制可执行文件!


“不利的一面:它使应用程序的数字签名无效。”
伊恩·博伊德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.