【发布时间】:2012-12-22 06:25:23
【问题描述】:
我昨晚在一台运行 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());
}
在一台测试机器上运行它,得到了我的预期——AllScreens 顺序与 DISplay Resolution 对话框顺序相匹配。
但是在有问题的机器上,上面代码的输出结果是相反的。 DISPLAY1 位于第二个屏幕(最右侧)的位置,而 DISPLAY2 位于最左侧的屏幕。
这真的很奇怪。由于这没有使用我的程序,它是 .NET 内部的东西。相同的代码可以在其他类似的机器上运行,所以我不认为这是一个普遍的问题,而是与这台机器隔离的问题。我尝试了更多类似问题的搜索,但结果为空,可能是由于搜索词(监视器、屏幕、.NET 都匹配很多与此问题无关的项目)。
任何人以前见过这个,理想情况下,知道如何解决它?重新安装 .NET 4 包没有帮助。在“显示分辨率”对话框中更改位置,然后再将它们改回来没有帮助,即使在两者之间重新启动也是如此。
谢谢。
【问题讨论】:
-
如果您在控制面板中更改屏幕顺序并重新运行您的程序,您会得到不同的结果吗?在行为不端的盒子和好盒子上?
-
交换显示器连接器,选择您的主显示器,然后重试。
-
@Dan-o - 还有 3 个盒子以同样的方式在现场正常工作。通过控制面板更改屏幕顺序不会改变行为。
-
@HansPassant -- 无法交换显示器连接器 - 一个是 DVI,另一个是 VGA。屏幕已经在屏幕侧的这些连接器上连接到运行相同 WES7 映像和相同软件的其他机器,并且工作正常。
标签: .net windows multiple-monitors