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

时间:2014-02-28 21:12:39

标签: windows-8 highdpi

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

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

我该怎么办?我读过清单中的其他设置可能会影响dpiAware以外的DPI虚拟化,这是真的吗?该应用程序可能正在通过API在运行时设置DPI感知,如何判断是否是这种情况?

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

1 个答案:

答案 0 :(得分:5)

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

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

DPIMangler:Blog postsource code