获取屏幕像素时要考虑比例因子



我正在尝试使用python获取屏幕尺寸。我不断得到不正确的值,因为我的代码考虑了比例因子。例如:我的屏幕分辨率设置为:2736 x 1824。我的比例因子是 200%,所以当我执行代码时,我得到 1368 x 912。

import win32api
width = GetSystemMetrics(0)
height = GetSystemMetrics(1)
print('Width:', width)
print('Height:', height)

有什么方法可以在没有比例因子的情况下获得窗口设置中显示的分辨率?我希望能够读取 2736 x 1824。

import ctypes
scaleFactor = ctypes.windll.shcore.GetScaleFactorForDevice(0) / 100

您可以使用 ctypes 通过 shcore 获取比例因子。然后你可以从中计算出真正的分辨率。

即:比例因子 1.25 为 125%

您的应用程序无法识别 DPI。Windows必须向应用程序谎报尺寸,并放大GUI以适应比例。

快速修复:

import ctypes
ctypes.windll.user32.SetProcessDPIAware()

对于可执行文件,建议在清单文件中设置 DPI 感知。

最新更新