.NET 认为屏幕的顺序不同于 Windows 控制面板 |显示 |屏幕分辨率

标签 .net windows multiple-monitors

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

谢谢。

最佳答案

AllScreens 属性是通过 EnumDisplayMonitors 填充的功能。

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

关于.NET 认为屏幕的顺序不同于 Windows 控制面板 |显示 |屏幕分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13979118/

相关文章:

.net - .Net 中的异步 BinaryReader 和 BinaryWriter?

ruby-on-rails - 我怎样才能加快 ruby​​ on rails 在 windows 上的测试?

c++ - 使用 win32/C++ 检索多个显示信息

c# - 如何在 VS2013 中启用输出窗口?

.net - 如何使用强名称对 .NET 程序集 DLL 文件进行签名?

windows - 如何从命令行添加/更新 MSI 内的属性?

windows - 启动 groovyserver\Groovy\Groovy-2.3.3\bin\.. 时出现意外错误

c++ - 当将窗口从显示器 B 移动到它时,双显示器设置中显示器 A 上的全屏模式会中断

windows-7 - Win7和多显示器: switch focus when moving mouse to different monitor?

c# - 检查 Type 或实例是否实现 IEnumerable 而不管类型 T