7

有没有办法强制应用程序在 Windows 8.1 中使用 DPI 虚拟化?我有一个应用程序错误地声明为 DPI 感知,并且在我的高 DPI 屏幕上显示太小(没有源)。如果它被 Windows 放大 2 倍就足够了。

我尝试编辑 .exe 的清单和设置<dpiAware>false</dpiAware>,但没有效果。(它可能使使用较大(适当)字体的应用程序的少数部分使用小字体(以像素为单位),就像我对 DPI 虚拟化所期望的那样,我不完全确定......但它确实做到了不激活 DWM 缩放。)

我能做些什么?我读到清单中的其他设置可能会影响 DPI 虚拟化dpiAware,这是真的吗?该应用程序可能在运行时通过 API 设置 DPI 感知,我如何确定是否是这种情况?

(在此处发布此内容而不是在超级用户上发布,因为没有面向用户的设置,我希望答案类似于“编辑清单某某”或“注入 DLL/附加调试器”并做到这一点”。此外,我没有源代码这一事实是次要的,我也有内部应用程序,我有源代码并想要修复,我正在寻求更通用的解决方案来修复两种情况。我希望没关系。)

4

1 回答 1

5

我刚刚发布了一个 DLL,它可以挂钩和重定向对 SetProcessDPIAware 的调用。对于通过代码禁用 DPI 缩放的应用程序,这是一种快速简便的修复方法(与二进制修补相比)。只需使用 CFF Explorer 之类的工具加载有问题的应用程序,然后将此 DLL 添加到导入表中。(或者,它可以在应用程序启动时动态注入。)

请注意,当前版本仅挂钩 SetProcessDPIAware 并保持 SetProcessDPIAwareness 不变。如果这是一个问题,请随时 ping 我,我会同时连接。

DPIMangler:博客文章源代码

于 2014-05-12T18:18:25.550 回答