如何在睡醒后停止窗口重新定位?
当我的多显示器系统不使用时,我将其置于睡眠状态。在我把它唤醒后,所有的窗口都会重新定位到不同的屏幕上。我能想到的最接近的模式是,主屏幕上的窗口会切换到第二个屏幕上。它看起来像是在睡眠前断开了主屏幕的连接,进而将所有的窗口切换到第二或第三屏幕上。
编辑:这是我使用的显卡–> SAPPHIRE FleX 100322FLEX Radeon HD 6450。
当我的多显示器系统不使用时,我将其置于睡眠状态。在我把它唤醒后,所有的窗口都会重新定位到不同的屏幕上。我能想到的最接近的模式是,主屏幕上的窗口会切换到第二个屏幕上。它看起来像是在睡眠前断开了主屏幕的连接,进而将所有的窗口切换到第二或第三屏幕上。
编辑:这是我使用的显卡–> SAPPHIRE FleX 100322FLEX Radeon HD 6450。
这是一个老问题了,但如果有人遇到同样的问题,我建议试试这里发布的解决方案: http://answers.microsoft.com/en-us/windows/forum/windows\7-hardware/windows-7-movesresizes-windows-7-movesresizes-windows-on-monitor-power/1653aafb-848b-464a-8c69-1a68fbd106aa
我运行的是Windows 8.1,有两个2560x1440的显示器,在DisplayPort上。当我从睡眠中醒来时,我的所有窗口都被推到了一个显示器上,并且有的窗口被调整了大小。这为我解决了这个问题,现在我所有的窗口位置和大小都被保留了下来。以下是相关链接内容:
我找到了一个解决方法。使用Sysinternals ProcessMonitor,我发现Windows正在访问以下注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
我的系统有三个条目:
DELF003YY7707BR0MUL_30_07D7_6A^9A3774EB79DEE3E3E38496CC7DF4D936
QHD32000001_31_07D6_D5^63E1ABDD175E7871DCAEB710418A0F75
SIMULATED_8086_2A42_00000000_00020000_1010100^CDE365D1B3F0942F0CF38BFB8E127AB4
00
每一个条目下都有一个树状的名称为
PrimSurfSize.cx
。其中两个键是:
PrimSurfSize.cy
00
00
在
ActiveSize.cx
下面是另一个分支,也叫ActiveSize.cy
。其中两个键是:
DELF00...
QHD3...
SIMULATED...
在前两个配置中(即
SIMULATED...
&007 &007),上面的键都是1440x900,所以没有涉及到。进一步我把分辨率(通过控制面板)改成1920x1080,移动/大小问题又回来了,但是右下角的设置是1600x900,也就是&007的设置。
并不是所有的NVIDIA显卡都支持伪造EDID的能力,造成这个问题的不仅仅是Sleep,还有就是Sleep。如果显示器被关闭或短暂断开,会对精心配置的屏幕布局造成严重破坏。由于这里的解决方案都没有对我有效,所以我写了一个工具,当显示器的数量发生变化时,可以恢复窗口位置。它的源代码这里。
在我的情况下,有三个1920x1080的显示器横向排列,似乎通过进入其他答案中提到的注册表键(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
),找到以SIMULATED
开头的键,然后将该键下的1920的值全部改成5760(1920乘以3,对于三个显示器来说,1920乘以3),就可以解决这个问题。
通常情况下,这将是由于显卡驱动没有正确支持休眠模式导致的,因此当电脑进入休眠状态时,无法检测到所连接的显示器。
如果更新驱动后仍不能解决这个问题,可能是由于显示器ID(EDID)异常报告导致的。通常可以在显卡驱动控制面板中强制检测显示器。
但是如果无法使用,可以在显示器断开连接的情况下,使用Windows分辨率窗口检测设备,然后选择显示器,它会报告 “另一个显示器未连接",然后在多显示器下,可以下拉选择 "无论如何尝试连接",这样会通过你选择的端口类型向显示器广播信号(信号不会是交互式的),然后连接显示器,显示器应该会正确解释发送的信号。
强制分辨率将覆盖屏幕的检测,并应在休眠状态下持续存在。
对我来说,修复方法是 https://superuser.com/a/908156/238666 。摘要:Windows在唤醒时无法从显示器上读取EDID信息,在Nvidia控制面板中可以将EDID信息保存到一个文件中,并设置PC从该文件中读取EDID信息,在任务项下。
在我有限的视野中,问题的根源可能是Nvidia显卡,但也可能是Windows、DisplayPort或显示器(联想X1 4K)。
我用这个小程序解决了。 https://github.com/hunkydoryrepair/MonitorKeeper/releases
只要运行它,它就可以在相同的位置上维护窗口。
Win Redock](https://github.com/manutalcual/winredock)在我的使用案例中效果最好—-在显示更改后恢复窗口位置。Redock是自动的 - 保存和恢复窗口,无需任何干预。
所以如果你的问题是你的笔记本在唤醒时显示位置有问题,这可能会帮助你。
喜欢与否,但根据戴尔的已知问题与特定4K显示器的链接 http://www.dell.com/support/Article/us/en/19/SLN295708/EN 我不得不在我的3台戴尔P2415Q 4K UHD 4K显示器上从59/60Hz切换到30Hz,Intel 4600与显示器的DP/mDP连接,它帮助了我–正如戴尔KB文章所说。这也适用于UP3214Q和P2715Q。
问题没有在低分辨率的QHD戴尔U2515H +相同的视频/PC上表现出来
注册表键删除和驱动更新都没有帮助。并且将显卡升级到NVIDIA Quadro P600也没能解决这个问题,所以停留在30Hz上。