获取可用监视器的数量

问题描述 投票:0回答:2

我正在编写一个需要跨越多个监视器的UWP应用程序。作为该要求的一部分,我自然需要知道当前有多少台显示器或显示设备连接到机器。这在UWP中很难做得很好。这些是我到目前为止尝试过的方法,它们不起作用或受限制:

  1. 在UWP之前,我会使用Screen.AllScreensSystem.Windows.Forms属性,即使它意味着将WinForms DLL导入WPF应用程序。遗憾的是,这不再是UWP中的一个选项。
  2. 使用WMI访问Win32_Desktopmonitor类以获取该信息 - 再次锁定在UWP中。
  3. 在注册表中查找它 - 相同。
  4. 编写外部非UWP实用程序以检索该信息,使用AppService在UWP和非UWP应用程序之间进行通信。对于这个要求来说,这似乎是一个非常复杂的操作。
  5. 使用本机UWP方法,使用ProjectionManager.GetDeviceSelector()获取AQS查询,然后将其传递给DeviceInformation.FindAllAsync以获取监视器计数。这有效,但速度非常慢。在我的高端笔记本电脑上查询4个显示器(笔记本电脑显示器,两个外部显示器甚至没有启用的WiDi连接)可能需要3-5秒。

现在,我正在使用选项#5,原生UWP方式。但我想知道这里是否有更简单的东西,这样我就可以更快地检索显示器的数量。

c# uwp multiple-monitors
2个回答
0
投票

尝试P / Invoke到User32 API(或任何其他不受支持的API)可能现在可以使用,但它不受Microsoft支持,无法提交到Windows应用商店,并且可能会停止使用未来的Windows Update。您永远不应该依赖应用程序上不受支持的功能。

UWP目前不支持多个屏幕或窗口,但如果您的应用程序仅限Destkop,您可以使用Desktop Bridge component查找您拥有的监视器数量,并定位任何传统的WinForms / WFP窗口。

但您可能无法使用Desktop Bridge组件来调整或移动UWP窗口(很多User32 API都会失败)。


-1
投票

我会看一下Windows.UI.ViewManagement.ProjectionManager.GetDeviceSelector()

https://docs.microsoft.com/en-us/uwp/api/windows.ui.viewmanagement.projectionmanager

我目前在UWP项目中使用ProjectionManager与辅助屏幕进行交互,我的应用程序与Windows Store兼容。

© www.soinside.com 2019 - 2024. All rights reserved.