在考虑比例因子的情况下获取屏幕像素

时间:2018-12-21 18:52:24

标签: python pywin32

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

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

有什么方法可以获取没有缩放因子的Windows设置中所示的分辨率?我希望能够阅读2736 x 1824。

2 个答案:

答案 0 :(得分:3)

import ctypes

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

您可以使用ctypes通过shcore获得比例因子。 然后,您可以从中计算出实际分辨率。

即:scaleFactor 1.25为125%

答案 1 :(得分:0)

您的申请不是DPI aware。 Windows必须向应用程序说谎有关尺寸,并放大GUI以适应比例。

快速修复:

import ctypes
ctypes.windll.user32.SetProcessDPIAware()

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