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

Windows 8 如何强制应用程序在Windows 7/8上使用DPI虚拟化,windows-8,highdpi,Windows 8,Highdpi,有没有办法强制应用程序在Windows 8.1中使用DPI虚拟化?我有一个应用程序错误地声明为DPI感知,并且在我的高DPI屏幕上显示太小(没有源代码)。如果Windows将其放大2倍就足够了 我试图编辑.exe的清单,并将其设置为false,但没有效果。(它可能会使使用较大(适当)字体的应用程序的少数部分使用小字体(以像素为单位),就像我预期的DPI虚拟化一样,我不完全确定……但它肯定没有激活DWM缩放。) 我能做什么?我了解到清单中的其他设置可能会影响DPI虚拟化,而不是dpiAware,这

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

我试图编辑.exe的清单,并将其设置为
false
,但没有效果。(它可能会使使用较大(适当)字体的应用程序的少数部分使用小字体(以像素为单位),就像我预期的DPI虚拟化一样,我不完全确定……但它肯定没有激活DWM缩放。)

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


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

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

请注意,当前版本仅钩住SetProcessDPIAware,而未触及SetProcessDPIAware。如果这是一个问题,请随意打我,我会把两者都勾起来


DPIMangler:,.

这对Win8.1没有帮助。实际上,在Process Explorer中,这里的所有应用程序在默认情况下都被视为支持DPI。虚拟化根本没有启动。您的DPI比例因子设置为多少?如果DPI缩放设置为100%,您描述的行为就是我期望看到的。我已经在Windows 8、8.1和10上成功地测试了这一点。希望看到一键式转换器。