哪个注册表项或Windows文件确定监视器在多监视器环境中的放置位置?


17

我有一台带有USB到VGA适配器的笔记本电脑,这使我可以在笔记本电脑中添加第三台显示器(第二台显示器使用板载插槽)。

它在Windows Vista上可以正常工作-您可以进入Windows的显示设置,Windows会识别出第三台显示器,并相应地拖动它。在Windows 7中,第三个监视器实际上不在Windows的显示设置中。该驱动程序允许您显示到第三个监视器,但是您不能将其移动到当前位置。显示设置相对于其他两个设置放错了位置(如果将窗口拖到其他位置,则它们应在对齐时最终位于底部)。

我打电话给技术支持,他们说Windows 7尚没有具有此功能的驱动程序。但是这是我的直觉。显示器的位置仍然有些类似于我在Vista上的位置,大约只有500像素左右。我认为某个地方有注册表项或驱动程序文件告诉此监视器在哪里。如果我可以修改数字并将其向上移动500像素,那么它就在正确的位置,而我不必等6个月即可为公司推出新的驱动程序。

有任何想法吗?

Answers:


8

在中签出各种密钥和文件夹

HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Video

特别是在最里面的MonXXXXXXX子文件夹中,应该是Attach.RelativeXAttach.RelativeY值,它们是监视器相对于像素0,0的位置。

奇怪的是,当我在这里检查带有两个监视器的Windows 7计算机时,它似乎没有显示第二个监视器。但是我的XP机器显示了我的全部三个,所以您的行驶里程可能会有所不同。

如果没有别的,这是一个起点!


很棒的发现!这正是我在寻找的钥匙。在两个位置修改relativeY值,然后重新启动扩展的桌面USB驱动程序会导致其移动。现在剩下的问题是:由于监视器的配置方式,我需要输入一个NEGATIVE值。我该怎么办?设置正值只会使我需要的显示器更低。这是我的设置:2 3 1这些是监视器编号(1和2接触着,三个在侧面)。更改attach.relativeY值会使3看起来更低,我想提高它。

看起来格式没有保持在那里,但希望您能理解-2在1上方,而3在它们的右侧,居于两者之间。数字,Windows是把它放在旁边监视1

尝试输入负值会发生什么?最后,您可能必须在登录时绑定启动脚本来进行调整(如果这不是靠自己的话)。
ƬᴇcƬᴇιᴇ007

您不能输入负值,Windows不允许您输入。在注册表的十六进制部分中,您可以放置​​数字和字母,而在十进制部分中,您只能放置数字值。我发布的40亿个数字肯定有效,但我不确定为什么。Windows中可能存在某种代码,这意味着429496xxxx表示一个负数。最后4个数字与像素负值超出负数相关。

Sweeeeeeeet。;)
Ƭᴇcʜιᴇ007

27

对于在Windows 7中寻找密钥的任何人,它都位于以下文件夹之一中:

HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\

在每个子文件夹中查找Position.cxPosition.cy;您必须编辑十六进制字符串。

二进制/十进制/十六进制转换器:

http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html


3
您如何知道哪个是活动配置?
Adisak

Adisak-我发现只需更改所有位置的值会更容易。
Artanis

1
@Adisak旧问题,但是对于仍在寻找它的任何人,这是我的工作:右键单击->导出配置节点(以防万一),将其保存在某个位置。删除每个子节点。退出Windows。重新登录。这将创建1个新项目,它是当前/活动项目。
勒内

要查找活动配置,可以使用MonitorInfoView。配置名称是所有监视器标识符的列表,所有标识符与结合使用*,标识符将从MonitorInfoView中“ 注册表项”列中的值开始。
gronostaj

4

我希望我知道为什么这样做,但我知道这样做:

要使监视器正常运行(因为注册表不允许负数),您必须使用attach.relativeY的值,如下所示:4294967040

感谢这个论坛帮助您找出了这一部分-http: //www.ureader.com/msg/164488.aspx

如果您将该数字的最后4位数字调低,则显示器将关闭,反之亦然。这也适用于attach.relativeX。稍作调整,我的设置恢复正​​常。

谁需要功能驱动程序pshh


感谢techie007让我走上了正确的路

亲爱的,我能指出钥匙的正确答案吗?:)
Ƭᴇcʜιᴇ007

您能否正确回答一半?大声笑

只要您能回答您的开放式问题半分即可。:)在我看来,您似乎要使用“某个地方的注册表项或驱动程序文件”来解决该问题的“任何想法”-我指出了用于设置它的注册表项。您还想要什么?血液?:)我想我必须在下一个答案中包括一个否定32位字十六进制数的课程。;)
Ƭᴇcʜιᴇ007'2

这是因为它是负整数的正整数表示。如果您想知道如何表示负数,请查找2的补码,然后将这些位视为无符号整数以获取正确的输入值。
Edwin Buck

2

从4294967296中减去您希望减去的金额,以获得注册表所需的数字。即,对于4294967296-250 = 4294967046。

对于您的极客...

此处的烦恼是由于注册表编辑器不会将32位解释为无符号的十进制整数或二进制数据的十六进制表示形式以外的任何事实。但是,当Windows在放置显示器时检索到该二进制数据时,它将其解释为有符号整数。为了让Windows知道32位带符号整数是负数,它会将最后一位设置为1(最左边),其余位则取反。因此-1的二进制值为11111111 11111111 11111111 11111111(十六进制:FF FF FF FF)。如果将其转换为无符号的十进制整数(如注册表编辑器一样),则会得到4,294,967,295。因此,就我们的目的而言,0等于4,294,967,


1

如果不尝试计算负值,而是通过在虚拟框的物理左上角放置逻辑0,0来使所有值都保持正值,则可能会更容易理解。就像在上下移动显示器时一样,您实际上是在将其他显示器向右和向下推。

例如,我有1280x1024和1920x1200显示器,其中第一个较小的显示器默认为第二个显示器的右上角,而不是第一个较小的显示器的左下角,其实际位置(左)并与之对齐(底部边缘处于相同高度) ,顶部当然较低,因为它不那么高)。

因此,从第二个1920x1080监视器开始,其位置为0,0,第一个为1920,0。我没有尝试为第一个监视器计算负数-(1920 + 1280),(1200-1024),而是将第一个监视器的所有正值都设为0,(1200 -1024),将第二个监视器的所有值都设为1280,0。

注销Windows,然后重新登录对我应用了设置。知道它可以在Windows Hyper-V Server上运行也很有用(我刚刚在2012 R2上做到了,这意味着这些设置在Windows 8和8.1中仍然可以使用)。这对于锁定屏幕分辨率设置但试图获得“裸机”风格的主机PC(您几乎不必更新或重新引导)并通过远程桌面纯粹在内部使用虚拟机(从另一台计算机复制该虚拟机)的人来说非常有用)。

感谢techie007的原始答案,这是解决所有问题的关键。如果您将此变体标记为有用,请不要忘记“增加”他的答案和问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.