【问题标题】:How to force an application to use DPI virtualization on Windows 7/8如何强制应用程序在 Windows 7/8 上使用 DPI 虚拟化
【发布时间】:2014-04-02 02:09:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: windows-8 highdpi


    【解决方案1】:

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

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

    DPIMangler:Blog postsource code

    【讨论】:

    • 这对 Win8.1 没有帮助。实际上,查看 Process Explorer 似乎默认情况下这里的所有应用程序都被认为是 DPI 感知的。虚拟化根本没有启动。
    • 您的 DPI 缩放系数设置为多少?如果 DPI 缩放设置为 100%,您描述的行为是我希望看到的。我已经在 Windows 8、8.1 和 10 上成功测试了这一点。
    • 希望看到一键式转换器。
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多