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

UWP如何从Projection的DeviceInformation.FindAllAsync结果中识别当前在用显示设备

方案1:使用Windows.Devices.Display.Core.DisplayManager获取主显示设备ID(适配Windows 10 1809+版本)

你可以通过该API获取系统所有激活的显示设备信息,主显示设备的特征是显示区域左上角坐标为(0,0),你可以拿到它的DeviceId后和ProjectionManager返回的设备列表做匹配过滤:

using Windows.Devices.Display.Core;
using Windows.Devices.Enumeration;

// 获取当前所有激活的显示目标
var displayManager = DisplayManager.GetCurrent();
var activeTargets = displayManager.GetCurrentTargets().Where(t => t.IsConnected).ToList();

// 查找主显示设备(左上角坐标为0,0的显示目标)
DisplayTarget mainDisplayTarget = null;
foreach (var target in activeTargets)
{
    foreach (var mode in target.SupportedVideoModes)
    {
        if (mode.Position.X == 0 && mode.Position.Y == 0)
        {
            mainDisplayTarget = target;
            break;
        }
    }
    if (mainDisplayTarget != null) break;
}

// 主显示设备的DeviceId
string mainDisplayDeviceId = mainDisplayTarget?.DeviceId;

拿到主显示ID后,你遍历ProjectionManager.GetDeviceSelector()返回的DeviceInformation集合时,直接排除DeviceId和上面拿到的mainDisplayDeviceId一致的项,剩下的就是可用于投影的外接显示设备。

方案2:低版本Windows兼容方案

如果你的应用需要适配Windows 10 1809以下的版本,可以通过DisplayInformation类结合应用当前所在的显示区域判断,但这种方式只能拿到应用当前所在屏幕的信息,无法直接拿到系统全局的主显示ID:

var displayInfo = DisplayInformation.GetForCurrentView();
// 可以拿到当前屏幕的分辨率、刷新率等参数,用于辅助匹配设备列表

补充说明

ProjectionManager本身没有直接提供获取当前在用显示设备的API,所以需要结合上面的显示设备枚举API配合使用。另外DisplayManager相关API调用不需要额外申请特殊权限,直接在UWP应用中即可调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:45:00