.NET认为屏幕的排序方式与Windows控制面板不同显示|屏幕分辨率

时间:2012-12-20 19:27:17

标签: .net windows multiple-monitors

我昨晚在运行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程序包没有帮助。更改“显示分辨率”对话框中的位置,然后将其更改回来也无济于事,即使重新启动也是如此。

感谢。

1 个答案:

答案 0 :(得分:0)

AllScreens属性通过EnumDisplayMonitors函数填充。

EnumDisplayMonitors的文档没有说明它返回监视器的顺序,因此可以推断它是一个可以从OS版本更改为OS版本的实现细节。