【问题标题】:.NET thinks screens are ordered differently than Windows Control Panel | Display | Screen Resolution does.NET 认为屏幕的顺序不同于 Windows 控制面板 |显示 |屏幕分辨率可以
【发布时间】: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


【解决方案1】:

AllScreens 属性通过EnumDisplayMonitors 函数填充。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多