如何从 DeviceInformation.FindAllAsync 个投影结果中找出当前使用的显示设备

How to find out currently using display device from DeviceInformation.FindAllAsync results for Projection

我正在尝试找出用户当前用作 computer/laptop 主显示器的显示器,以便我可以向用户显示可用的显示器,它支持投影并且可以使用ProjectionManagerAPI。请记住,这是针对 UWP 应用程序的。

    DeviceInformationCollection displayDevices = DeviceInformation.FindAllAsync(ProjectionManager.GetDeviceSelector());

DeviceInformation.FindAllAsync(...)returns合集DeviceInformationDeviceInformationPairing 属性,但总是 returns false(即使对于主显示器)。

是否有任何其他 API 可用于通过显示获得主要 display/currently?

例如:

  1. 我从 DeviceInformation 获得的 DeviceId 可用于 BluetoothDevice.FromIdAsync(String DeviceId) 蓝牙特定 API 要求,例如 - Connected 状态。
  2. 我可以获取当前使用的显示 ID DeviceId 并与集合中的 DeviceInformation.DeviceId 匹配以丢弃它吗?

ProjectionManager 有类似的东西吗?我已经浏览了 official docs, also github examples,但找不到合适的东西。所以,需要帮助。谢谢。

Is there any other APIs which I can use to get the primary display/currently using display?

ProjectionManager 没有这样的 api 可以检测到主显示器。但你可以使用 DisplayRegion 来检测它。

如果你想获得主要的,你可以检查当前 DisplayRegion WorkAreaOffset 是否是 {0,0}。它有设备 ID 属性,你可以用它来获得匹配的显示器。

IReadOnlyList<DisplayRegion> displayRegions = ApplicationView.GetForCurrentView().WindowingEnvironment.GetDisplayRegions();
   
// count all the DisplayRegions that are marked as available to the app for use.
foreach (DisplayRegion displayregion in displayRegions)
{
    if (displayregion.IsVisible)
    {
        Debug.WriteLine(displayregion.WorkAreaOffset);

    }
}

用于获取当前使用的显示器。

ApplicationView.GetForCurrentView().GetDisplayRegions()[0]

更多代码请参考官方code sample.