我正在编写一个需要跨越多个监视器的UWP应用程序。作为该要求的一部分,我自然需要知道当前有多少台显示器或显示设备连接到机器。这在UWP中很难做得很好。这些是我到目前为止尝试过的方法,它们不起作用或受限制:
Screen.AllScreens
的System.Windows.Forms
属性,即使它意味着将WinForms DLL导入WPF应用程序。遗憾的是,这不再是UWP中的一个选项。Win32_Desktopmonitor
类以获取该信息 - 再次锁定在UWP中。ProjectionManager.GetDeviceSelector()
获取AQS查询,然后将其传递给DeviceInformation.FindAllAsync
以获取监视器计数。这有效,但速度非常慢。在我的高端笔记本电脑上查询4个显示器(笔记本电脑显示器,两个外部显示器甚至没有启用的WiDi连接)可能需要3-5秒。现在,我正在使用选项#5,原生UWP方式。但我想知道这里是否有更简单的东西,这样我就可以更快地检索显示器的数量。
尝试P / Invoke到User32
API(或任何其他不受支持的API)可能现在可以使用,但它不受Microsoft支持,无法提交到Windows应用商店,并且可能会停止使用未来的Windows Update。您永远不应该依赖应用程序上不受支持的功能。
UWP目前不支持多个屏幕或窗口,但如果您的应用程序仅限Destkop,您可以使用Desktop Bridge component查找您拥有的监视器数量,并定位任何传统的WinForms / WFP窗口。
但您可能无法使用Desktop Bridge组件来调整或移动UWP窗口(很多User32
API都会失败)。
我会看一下Windows.UI.ViewManagement.ProjectionManager.GetDeviceSelector()
https://docs.microsoft.com/en-us/uwp/api/windows.ui.viewmanagement.projectionmanager
我目前在UWP项目中使用ProjectionManager与辅助屏幕进行交互,我的应用程序与Windows Store兼容。