Windows Screens.AllScreens在切换主显示后不会更新。
我正在尝试使用具有小屏幕(800/480)和外部显示器(1920/1080)的仪器来操作多显示器设置。外接显示器必须始终是主屏幕。我需要在小型监视器上执行某些任务,例如更改方向(DMDO_180 / DMDO_DEFAULT)。并触发触摸屏校准(tabcal.exe)。这两个操作都要求正在执行操作的屏幕是主显示器。
我有更改显示的代码但是当屏幕改变时,它不会反映在Screen.AllScreens中。如果未更新AllScreen,则我的任务会失败,因为主屏幕不正确。
我注意到Screen对象确实在上下文切换时更新了,但我需要强制它发生。我看过Screen.AllScreen is not giving the correct monitor count。它提到“ 我查看了源代码(请记住我们可以使用MS Symbol服务器执行此操作).AllScreens使用非托管API在第一次访问时获取屏幕,然后将结果存储在静态变量供以后使用。 这样做的结果是,如果在程序运行时监视器的数量发生变化;然后Screen.AllScreens将不会接收更改。 “这不完全正确。我已经挂钩了窗口加载的事件,如果我在触发之前设置断点并更改主屏幕,触发事件,AllScreens对象得到更新并显示正确的主屏幕。
我尝试模仿此行为的示例是触发我的应用程序代码和我在Internet上找到的代码之间的事件,该代码使用DEVMODE结构来操作显示但两者之间的触发事件不会更新AllSCreens对象。
执行此操作的代码是数千行,因此我会根据请求发布。
我正在使用VS2015,C#,WPF。
如何使用非托管API强制AllScreens更新?
答案 0 :(得分:1)
Microsoft.Win32.SystemEvents.DisplaySettingsChanged似乎在主显示开关上被触发。