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
相关产品推荐
相关产品推荐

