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

