c# - 使用 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 从我的程序中重新排列这些监视器的相对位置,如果是这样,我必须操纵该结构的哪些字段?
解决方案
推荐阅读
- git - 跨所有新文件和修改文件的 Git grep(提交前)
- java - Java:如何让while循环只输出最后一行
- python - Python - 在不使用内置旋转方法的情况下旋转图像
- docker - 尽管有 iptables,但我可以访问 Google Cloud 上的端口 80 - 为什么?
- android - 为什么 LiveData 仍然通知处于 onPause 状态的 Activity?
- audio - Youtube Red 停止下载视频的音频
- python - 简单的神经网络反向传播实现——梯度问题(scipy fmin_cg 优化器)
- java - 进行不同父字段初始化的最佳方法是什么?
- c - 如何在C中存储预先不知道大小的数字序列?
- javascript - 在 if 语句中添加多个 EventListener