我在Windows 10(1703)下在具有不同DPI的两台显示器上运行程序(称之为prog.exe)。 该计划包含:
SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
CreateWindow(....);
prog.exe清单不包含对
的引用<dpiAware>...</dpiAware>
如果是prog.exe - >属性 - &gt;兼容性 - &gt;未选中“覆盖高DPI缩放”,窗口在从监视器移动到另一个时接收WM_DPICHANGED,并且prog.exe可以重新缩放它。 现在,如果我选中“覆盖高DPI缩放”并将其设置为“按应用程序执行缩放”,则窗口不再接收WM_DPICHANGED(使用spy ++确认),因此prog.exe不知道何时必须重新缩放它。 这看起来很奇怪:应用程序执行扩展时应该警告应用程序DPI更改! 我的问题的解决方案可能很简单:不选中“覆盖高DPI缩放”,但事情更复杂: prog.exe(覆盖高DPI缩放现在未选中)由xemacs(通过comint)作为子进程启动,并且使xemacs文本unblurry的唯一方法是将其兼容性设置为“由应用程序执行的缩放”。但是它的子进程prog.exe被认为是PROCESS_PER_MONITOR_DPI_AWARE(由processExplorer确认,并且还通过在prog.exe中显示GetProcessDpiAwareness的结果)。与检查“覆盖高DPI缩放”时的情况相同。 我还尝试使用SetProcessDpiAwareness或SetProcessDpiAwarenessContext重置prog.exe的dpi意识,但我收到错误“访问被拒绝”:逻辑,因为MSDN说,一旦设置了进程dpi意识,之后就无法更改。 问题是:如何使用“新鲜”的DPI感知启动prog.exe,而不是从父进程继承?