You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python获取显示器分辨率不准确,如何获取系统设置中的1920x1080?

获取Windows真实屏幕物理分辨率的解决方法

你遇到的问题是因为Windows启用了显示缩放(比如125%缩放),你用的三种方法默认获取的是经过缩放后的逻辑分辨率,而非显示设置里的物理分辨率。以下是几种解决方法:

方法1:通过ctypes启用DPI感知后获取

import ctypes
# 让进程启用DPI感知,忽略系统缩放
ctypes.windll.user32.SetProcessDPIAware()
# 获取真实物理分辨率
width = ctypes.windll.user32.GetSystemMetrics(0)
height = ctypes.windll.user32.GetSystemMetrics(1)
print(f"真实分辨率:{width}x{height}")

方法2:使用win32api设置DPI感知

import win32api
import win32gui
# 设置进程为系统DPI感知
win32gui.SetProcessDPIAware()
width = win32api.GetSystemMetrics(0)
height = win32api.GetSystemMetrics(1)
print(f"真实分辨率:{width}x{height}")

方法3:Tkinter结合DPI感知

from tkinter import Tk
import ctypes
# 先启用DPI感知
ctypes.windll.user32.SetProcessDPIAware()
root = Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
print(f"真实分辨率:{width}x{height}")
root.destroy()

方法4:通过DPI计算物理分辨率

如果不想修改进程的DPI感知,可以通过获取系统DPI值,用逻辑分辨率反推物理分辨率:

import ctypes
user32 = ctypes.windll.user32
# 获取系统DPI(默认96对应100%缩放)
dpi = user32.GetDpiForSystem()
# 获取逻辑分辨率
logical_width = user32.GetSystemMetrics(0)
logical_height = user32.GetSystemMetrics(1)
# 计算物理分辨率
physical_width = int(logical_width * dpi / 96)
physical_height = int(logical_height * dpi / 96)
print(f"真实分辨率:{physical_width}x{physical_height}")

内容的提问来源于stack exchange,提问作者The_Fishy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:09:12