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

Python获取Windows分辨率后如何使用f-string格式化输出?

Windows下Python获取屏幕分辨率并适配f-string输出方案

问题背景

现有基于ctypes的Windows分辨率获取代码可输出1920x1080格式的结果,需要调整为支持f-string格式化调用的形式,适配类neofetch工具的输出逻辑,同时寻求更稳定的分辨率获取方案。

原始代码:

# libraries
import ctypes

# get screen resolution
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), 'x', user32.GetSystemMetrics(1)

# list to store resolution and the x that is between them
items = []

# add resolution to list
for item in screensize:
    resolution = (str(item))
    items.append(item)

# print resolution
for item in items:
    print(item, end='')

目标输出形式:

print(f'''Resolution: {screen_resolution}''')
User: {getuser()}

最简修改方案

原有代码的列表拼接逻辑属于冗余实现,直接提取宽、高两个数值后用f-string拼接为目标字符串即可,可直接适配目标输出逻辑:

import ctypes
import getpass

# 提取分辨率宽高
user32 = ctypes.windll.user32
screen_width = user32.GetSystemMetrics(0)
screen_height = user32.GetSystemMetrics(1)
# f-string直接拼接为需要的分辨率字符串
screen_resolution = f"{screen_width}x{screen_height}"

# 用户名获取函数
def getuser():
    return getpass.getuser()

# 目标格式输出
print(f"Resolution: {screen_resolution}")
print(f"User: {getuser()}")

更优的分辨率获取方案

注意:直接调用GetSystemMetrics在系统开启DPI缩放(比如125%、150%缩放)时,拿到的是缩放后的逻辑分辨率,不是显示器真实物理分辨率,做类neofetch的系统信息工具时建议优先用以下两种方案:

  • 方案1:原生ctypes实现,开启DPI感知获取真实分辨率
    不需要额外安装依赖,手动开启进程的DPI感知等级后再调用系统接口,就能拿到准确的物理分辨率:
    import ctypes
    # 开启系统DPI感知,避免缩放导致分辨率数值不准
    ctypes.windll.shcore.SetProcessDpiAwareness(1)
    user32 = ctypes.windll.user32
    screen_width = user32.GetSystemMetrics(0)
    screen_height = user32.GetSystemMetrics(1)
    screen_resolution = f"{screen_width}x{screen_height}"
    
  • 方案2:使用第三方库screeninfo,自动适配多显示器、DPI场景
    如果你需要支持多显示器分辨率展示、不想手动处理Windows系统接口的边界兼容问题,可以直接用这个封装好的库,调用逻辑更简单。
    安装命令:pip install screeninfo
    调用示例:
    from screeninfo import get_monitors
    # 获取主显示器分辨率
    primary_monitor = next(m for m in get_monitors() if m.is_primary)
    screen_resolution = f"{primary_monitor.width}x{primary_monitor.height}"
    
    # 如果要展示所有显示器分辨率,直接遍历拼接即可
    # all_res = " | ".join([f"{m.width}x{m.height}" for m in get_monitors()])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23