如何在Windows 7/8上强制应用程序使用DPI虚拟化

7
有没有办法强制一个应用程序在Windows 8.1中使用DPI虚拟化? 我有一个错误声明为DPI感知的应用程序,在我的高DPI屏幕上显示得太小了(没有源代码)。如果Windows将其放大2倍,就足够了。
我尝试编辑.exe文件的清单,并设置false,但没有效果。(它可能会使应用程序中使用较大(适当)字体的几个部分使用小字体(以像素为单位),就像我对DPI虚拟化的期望一样,但我不是完全确定...但它肯定没有激活DWM缩放。)
我该怎么办?我读到,清单中的其他设置可能会影响DPI虚拟化,而不是dpiAware,这是真的吗?该应用程序可能会通过API在运行时设置DPI感知,我怎样才能找出这种情况?
(将此发布在此处而不是在超级用户上,因为没有面向用户的设置,我希望答案是“编辑如此这般的清单”或“注入DLL /附加调试器并执行此操作”之类的内容。另外,我没有源代码是次要的,我也有内部应用程序,我有源代码想要修复,我正在寻求可以解决两种情况的更一般的解决方案。希望这没问题。)
1个回答

5
我刚刚发布了一个 DLL 文件,可以钩取和重定向对 SetProcessDPIAware 的调用。对于那些通过代码禁用 DPI 缩放的应用程序来说,这是一种快速且简便的修复方法(相比二进制修补)。只需像 CFF Explorer 这样的工具加载有问题的应用程序,然后将此 DLL 添加到导入表即可。(或者在应用程序启动时动态注入它。)
请注意,当前版本仅钩取 SetProcessDPIAware 并未触及 SetProcessDPIAwareness。如果这是个问题,请随时联系我,我会同时钩取两者。
DPIMangler:博客文章源代码

这对Win8.1没有帮助。实际上,查看进程资源管理器,所有应用程序似乎默认都被视为DPI感知。虚拟化根本不会启动。 - Evengard
你的DPI缩放因子设置为多少?如果DPI缩放设置为100%,那么您所描述的行为就是我所期望看到的。我已经在Windows 8、8.1和10上进行了成功测试。 - George
希望能看到一个一键转换器。 - Pui Ho Lam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接