3

昨晚我在运行 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 包没有帮助。在“显示分辨率”对话框中更改位置,然后再将它们改回来没有帮助,即使在两者之间重新启动也是如此。

谢谢。

4

1 回答 1

1

AllScreens属性是通过EnumDisplayMonitors函数填充的。

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

于 2012-12-21T22:25:23.520 回答