我昨晚在运行Windows 7 Embedded Standard 64位且连接了2台显示器的PC上看到了奇怪的事情。 “显示分辨率”对话框将监视器显示为显示1和显示2(从左到右)。当我运行我编写的使用两个屏幕的程序时,我在显示器1上预期的输出显示在最右边的显示器上,我在显示器2上预期的输出显示在最左边的显示器上。
在这里花了一些时间在谷歌上,最后使用我发现的一些代码来创建一个显示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());
}
将它放在一台测试机器上并得到我的预期 - AllScreens命令与DIsplay Resolution对话框顺序匹配。
但是在有问题的机器上,上面代码的输出反过来了。 DISPLAY1位于第二个屏幕(最右边)的位置,DISPLAY2位于最左边的屏幕。
这真的很奇怪。由于这不是我的程序,它是.NET内部的东西。相同的代码适用于其他类似的机器,所以我不认为这是一个普遍的问题,但是这个机器是一个孤立的问题。我已经尝试过更多搜索类似的问题但是空洞,可能是由于搜索条件(监视器,屏幕,.NET都匹配了很多与此问题无关的项目)。
之前有人见过这个,理想情况下,有一个关于如何修复它的想法?重新安装.NET 4程序包没有帮助。更改“显示分辨率”对话框中的位置,然后将其更改回来也无济于事,即使重新启动也是如此。
感谢。
答案 0 :(得分:0)
AllScreens
属性通过EnumDisplayMonitors
函数填充。
EnumDisplayMonitors
的文档没有说明它返回监视器的顺序,因此可以推断它是一个可以从OS版本更改为OS版本的实现细节。