【发布时间】:2015-05-20 09:36:07
【问题描述】:
我正在使用这段代码从使用 Python 2.7 的 Surface Pro 第一代 Win 8.1 PC 打印出显示器分辨率:
import ctypes
from ctypes import windll
user32 = ctypes.windll.user32
screensize = (user32.GetSystemMetrics(0), user32.GetSystemMetrics(1))
print "Screensize:", screensize
但问题是,我通过命令提示符运行它与通过 Python shell 运行脚本得到不同的结果。
仅运行脚本我得到 1280x720,但通过 IDLE Shell 我得到 1920x1080。
现在,由于我在 Surface Pro 上运行它,我几乎可以肯定这与 DPI 缩放有关(有人提出了类似的问题 here)。如果是这种情况,那一定是因为 Python IDLE 已禁用 DPI 缩放。
那么,我如何防止这种情况发生,以便在运行此代码时获得一致且准确的结果,而不管它是如何运行的、运行它的机器类型是什么,或者是否禁用了 DPI 缩放?也许是 CEF Python?
非常感谢任何帮助。谢谢。
【问题讨论】:
-
您确实遇到了DPI virtualization 的问题,为了让应用程序 DPI 知道它们必须包含正确的清单文件或在任何会触发虚拟化的 Win API 调用之前调用 SetProcessDpiAwareness 函数。我不知道如何对 Python 脚本执行此操作...
-
顺便说一句,当您从 Python IDLE 运行脚本并更正数字时,您会得到错误的(虚拟化)数字,因为 Python IDLE 是 Dpi 感知,因此您的脚本会通过它启动也是。
-
看看这个answer
标签: python-2.7 screen-resolution dpi getsystemmetrics