我的应用程序是使用pygame包装SDL编写的Python代码,但我想这可能是一个更普遍的与Windows API有关的问题。在我的一些Python应用程序中,我希望即使在高分辨率下也能在Windows 10下进行像素级控制。例如,如果我的Surface Pro 3具有2160x1440的本机分辨率,则我希望能够以这些尺寸进入全屏模式并呈现完全相同尺寸的全屏图像。这样做的障碍是“DPI缩放”。在Windows的“设置”->“显示”下,默认值为“更改文本、应用程序和其他项目的大小”的值为“150%(推荐)”,结果是我只看到了2/3的图像。我已经发现如何解决这个问题...
- 通过将滑块向下移动到100%,可以在整个系统范围内实现(但对于大多数其他应用程序而言是不理想的)。
- 只针对
python.exe
和pythonw.exe
,可以进入这些可执行文件的“属性”对话框,选择兼容性选项卡,并单击“在高 DPI设置下禁用显示缩放”。我可以仅为自己或所有用户执行此操作。我还可以通过以编程方式设置适当的注册表键或通过.exe.manifest
文件来自动化此过程(后者似乎还需要全局设置更改,以优先使用外部清单,在其他应用程序可能会产生副作用的情况下)。
我的问题是:我能否在打开图形窗口之前,在每次启动时从内部我的程序中进行此操作?我或使用我的软件的任何人都不一定希望对所有 Python应用程序启用此设置-我们可能只想在运行特定的Python程序时启用它。我想象中可能有一个winapi
调用(或在pygame中包装的SDL中的某些内容)可以实现此目的,但到目前为止,我的研究没有结果。
SetProcessDPIAware()
。如果你无法完全控制清单文件(因为每个可执行文件只能有一个),则可能需要使用此调用。 - andlabs