昨晚我在一台运行 Windows 7 Embedded Standard 64 位且连接了 2 个显示器的 PC 上看到了奇怪的事情。 “显示分辨率”对话框将显示器显示为显示器 1 和显示器 2(从左到右)。当我运行我编写的使用两个屏幕的程序时,我期望在显示器 1 上显示的输出显示在最右边的显示器上,而我期望在显示器 2 上显示的输出则显示在最左边的显示器上。
在这里和 Google 上花了一些时间,最终使用我发现的一些代码来创建一个显示 System.Windows.Forms.Screen.AllScreens 内容的控制台应用程序:
// For each screen, add the screen properties to a list box.
foreach (var screen in System.Windows.Forms.Screen.AllScreens)
{
Console.WriteLine("Device Name: " + screen.DeviceName);
Console.WriteLine("Bounds: " +
screen.Bounds.ToString());
Console.WriteLine("Type: " +
screen.GetType().ToString());
Console.WriteLine("Working Area: " +
screen.WorkingArea.ToString());
Console.WriteLine("Primary Screen: " +
screen.Primary.ToString());
}
在一台测试机器上运行它并得到了我所期望的结果——所有屏幕顺序与显示分辨率对话框顺序相匹配。
但在有问题的机器上,上面代码的输出却相反。 DISPLAY1 位于第二个屏幕(最右侧)的位置,DISPLAY2 位于最左侧屏幕的位置。
这真的很奇怪。因为这没有使用我的程序,所以它是 .NET 内部的东西。相同的代码可以在其他类似的机器上运行,所以我认为这不是一个普遍的问题,而是一个与该机器隔离的问题。我尝试更多地搜索类似的问题,但结果是空的,可能是由于搜索词(监视器、屏幕、.NET 都匹配很多与此问题无关的项目)。
任何人以前见过这个,并且最好知道如何解决它?重新安装 .NET 4 包没有帮助。更改“显示分辨率”对话框中的位置然后将其更改回来并没有帮助,即使中间重新启动也是如此。
Thanks.
The AllScreens
属性是通过填充EnumDisplayMonitors功能。
的文档EnumDisplayMonitors
没有表明它返回监视器的顺序,因此可以推断它是一个可以根据操作系统版本而变化的实现细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)