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

2023-12-10

昨晚我在一台运行 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());
}

在一台测试机器上运行它并得到了我所期望的结果——所有屏幕顺序与显示分辨率对话框顺序相匹配。

但在有问题的机器上,上面代码的输出却相反。 DISPLAY1 位于第二个屏幕(最右侧)的位置,DISPLAY2 位于最左侧屏幕的位置。

这真的很奇怪。因为这没有使用我的程序,所以它是 .NET 内部的东西。相同的代码可以在其他类似的机器上运行,所以我认为这不是一个普遍的问题,而是一个与该机器隔离的问题。我尝试更多地搜索类似的问题,但结果是空的,可能是由于搜索词(监视器、屏幕、.NET 都匹配很多与此问题无关的项目)。

任何人以前见过这个,并且最好知道如何解决它?重新安装 .NET 4 包没有帮助。更改“显示分辨率”对话框中的位置然后将其更改回来并没有帮助,即使中间重新启动也是如此。

Thanks.


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐