首页 > 解决方案 > 使用 ChangeDisplaySettingsEx 以编程方式更改相对显示器位置?

问题描述

我有 3 台显示器,其中 2 台是 4K,由于某些游戏在主显示器为 4K 时运行不流畅,我设置了一个小型 C# 程序,为我更改主显示器的分辨率和 dpi 设置。

是的,我知道我可以将游戏设置为自动为我切换显示器分辨率,但我希望能够以无边框全屏模式运行游戏,这样我就可以轻松地将鼠标移到我有聊天和聊天的另外两台显示器上诸如此类的网站。

但是,每当我更改分辨率和 dpi 时,显示器都会根据显示设置相对于彼此“移动”。

例如,如果我将主监视器(监视器#1)设置为 1080p,它们的相对设置是这样的:

         +-------+++----------------+
         |   1   ||                 |
         +-------+|        2        |
+-------+         |                 |
|   3   |         |                 |
+-------+         +-----------------+

这使得将鼠标移动到第三台显示器(左侧的显示器)变得非常困难,因为没有重叠的坐标。然后我必须进入显示设置来重新排列它们,这就是我首先创建程序的原因,以避免进入显示设置。

如果我通过向下移动主监视器来修复这个相对位置,以便它们都有一个共同的基线,然后再将分辨率设置回 4K,那么它最终会成为以下两种配置之一:

                   +----------------+                           +----------------+
                   |                |                           |                |
                   |       2        |                 +-------+ |       2        |
                   |                |                 |   3   | |                |
                   +----------------+                 +-------+ +----------------+
+-------++----------------+              < or >       +----------------+
|   3   ||                |                           |                |
+-------+|       1        |                           |       1        |
         |                |                           |                |
         |                |                           |                |
         +----------------+                           +----------------+

我查看了注册表,为了设置 DPI,我调整了以下注册表项下的值:

HKCU
 +-- Control Panel
      +-- Desktop
           +-- PerMonitorSettings
                +-- <device id>
                     +-- DpiValue (REG_DWORD)

该位置没有这样的设置,但是,DpiValue 是唯一的一个。

要设置我使用User32.ChangeDisplaySettingsEx的分辨率,我已经查看了传递给它的结构,但我似乎看不到任何可以让我设置其位置的东西。

所以我的问题很简单,有没有办法让我使用 ChangeDisplaySettingsEx 从我的程序中重新排列这些监视器的相对位置,如果是这样,我必须操纵该结构的哪些字段?

标签: c#windows

解决方案


推荐阅读