如何在UWP应用中获取主机系统的屏幕分辨率(不受启动显示器影响)
UWP获取所有显示器分辨率的可行方案
你可以通过UWP的DisplayMonitor和DisplayInformationAPI直接枚举所有连接的显示器,无需移动应用就能获取包括主显示器在内的所有屏幕分辨率信息,具体实现如下:
实现步骤
- 引入必要的命名空间:
using Windows.Devices.Display; using Windows.Graphics.Display;
- 枚举所有显示器并获取分辨率:
// 异步获取系统中所有已连接的显示器 var allMonitors = await DisplayMonitor.GetAllAsync(); foreach (var monitor in allMonitors) { // 通过显示器ID获取对应的显示信息 var displayInfo = DisplayInformation.GetForDisplayId(monitor.DisplayId); // 原生物理分辨率(不受系统缩放影响) string nativeRes = $"物理分辨率:{displayInfo.ScreenWidthInRawPixels} × {displayInfo.ScreenHeightInRawPixels}"; // 当前生效的分辨率(考虑系统缩放比例) string effectiveRes = $"有效分辨率(含缩放):{displayInfo.ResolutionScale}"; // 标记是否为主显示器 string primaryTag = monitor.IsPrimary ? "【主显示器】" : ""; // 处理获取到的信息,比如打印或展示到UI Console.WriteLine($"{monitor.DisplayName} {primaryTag}"); Console.WriteLine(nativeRes); Console.WriteLine(effectiveRes); }
关键细节
DisplayMonitor.GetAllAsync():直接获取所有已连接的显示器列表,每个DisplayMonitor实例包含IsPrimary属性,可以直接判断是否是主机的主显示器。DisplayInformation.GetForDisplayId():通过显示器的唯一ID获取对应的分辨率数据,其中ScreenWidthInRawPixels和ScreenHeightInRawPixels是显示器的原生硬件分辨率,不会因为系统缩放或应用窗口大小而改变。- 这个方案不需要移动应用窗口,启动时就能一次性获取所有显示器的信息,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Ritesh Kumar
相关产品推荐
相关产品推荐

