从睡眠中醒来后如何阻止窗户重新定位?

Kin*_*oon 158 windows-7 sleep

我的多显示器系统在不使用时进入睡眠状态。唤醒后,所有窗口都重新定位到不同的屏幕。我能想到的最接近的模式是主屏幕上的窗口切换到第二个屏幕。看起来它在进入睡眠状态之前断开了主屏幕的连接,从而将所有窗口切换到第二个或第三个屏幕。

编辑:这是我正在使用的显卡 --> SAPPHIRE FleX 100322FLEX Radeon HD 6450

Joh*_*man 68

这是一个老问题,但如果有人带着同样的问题来到这里,我建议尝试这里发布的解决方案:

http://answers.microsoft.com/en-us/windows/forum/windows_7-hardware/windows-7-movesresizes-windows-on-monitor-power/1653aafb-848b-464a-8c69-1a68fbd106aa

我在 DisplayPort 上运行带有两个 2560x1440 显示器的 Windows 8.1。从睡眠中醒来时,我所有的窗户都被推到了一个显示器上,其中一些调整了大小。这为我解决了这个问题;现在我所有的窗口位置和大小都被保留了。以下是相关链接内容:

我找到了解决方法。使用 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...)中,上面的键是 1440x900,所以没有涉及。

第三个 ( SIMULATED...) 设置为 1024x768。

我将这些更改为 1600x900,问题就解决了。

此外,我将分辨率(通过控制面板)更改为 1920x1080,移动/调整大小问题又回来了,但右下角设置为 1600x900,即SIMULATED...设置。

因此,出于某种原因,其中一个配置没有正确设置。

我不知道为什么有三个配置,我只用过一个显示器。

  • 只需删除整个 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration,它也能正常工作,而且速度更快。 (33认同)
  • 删除条目对我不起作用(Windows 10)。我一关闭显示器,就会再次创建“模拟”条目。原始解决方案有效(即使用实际分辨率修改每次出现的 1024,768)。 (4认同)
  • 按照 @OlafM 建议删除整个配置效果很好。就我而言,Windows 大约有 30 个条目。重新启动后,只重新创建了一个,其中仅包含我实际插入的监视器。 (3认同)
  • 这是我在 Microsoft Answers for Windows 10 上找到的另一篇相关帖子。 https://answers.microsoft.com/en-us/windows/forum/windows_10-hardware/windows-10-multiple-display-windows-are-moved-and /2b9d5a18-45cc-4c50-b16e-fd95dbf27ff3 (2认同)
  • 唉,我说得太早了。不久之后问题又回来了。但奇怪的是,在设备管理器中显示隐藏设备时发现了我刚刚卸载的 640x480 显示器。也许这会解决问题......但我有一种可怕的感觉,显示器会回来。 (2认同)
  • 我首先删除了所有配置值,但这对我不起作用。所以我重新启动并在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration 中看到一个文件夹(GSM5A...)。然后我锁定屏幕并等到显示屏关闭。唤醒计算机后,创建了另一个文件夹(NOEDID_...)。然后我将所有值从 GSM5A.. 复制到 NOEDID_.. 并让显示器再次进入睡眠状态。这一次,它醒来了,我的窗户似乎都保持了它们的大小和位置。 (2认同)

Tan*_*aki 35

问题很可能与图形驱动程序有关。每当单个显示器与 Windows 中的多显示器设置断开连接时,Windows 将尝试将所有内容从该屏幕移动到剩余的屏幕上。通常,挂起/休眠/关闭计算机时不会发生这种情况。因此,这可能是因为图形驱动程序执行以下操作之一:

  • 当您将计算机置于睡眠状态时“断开连接”显示器,因此当 Windows 唤醒时,它必须重新确定放置所有内容的位置。
  • 每次使计算机退出睡眠状态时,以不同的顺序识别显示器,迫使 Windows 重新排列您的应用程序窗口。

访问芯片组制造商的网站,检查您的图形驱动程序是否有更新。

  • 7i5bnk NUC 也有同样的问题 - 获得最新的英特尔驱动程序 (2认同)

byt*_*orm 19

如果您的计算机配备英特尔核芯显卡,您必须从英特尔显卡控制面板设置扩展显示选项(和分辨率设置)。如果您从 Windows 显示设置执行此操作,它将在您从睡眠模式唤醒后重置。

这是一个屏幕截图。

在此处输入图片说明

  • 在我重置设置然后从英特尔显卡应用后,它对我有用。 (2认同)

小智 10

我想我通过结合这些帖子中的想法找到了解决此问题的方法。

(我的电脑是 Windows 10 TH2,带 HDMI 端口的 Intel HD4600,长虹 4k 显示器)

这是程序。

  1. 删除 ...GraphicDrivers\Configuration 和 GraphicDrivers\Connectivity 下的所有额外注册表项,只留下与我的显示器对应的条目 (MST00301...)

  2. 在将显示器置于睡眠状态之前,只需键入“WIN”+“D”组合键即可最小化所有桌面窗口。

  3. 打开显示器后,再次键入“WIN”+“D”以恢复所有窗口。

  • 我认为不需要 Win+D。删除所有条目并重新启动电脑后,外部显示器将再次添加到注册中。之后它似乎按预期工作。也许 windows 被许多不同的配置混淆了。就我而言,我有 12 个条目,现在只有 2 个:https://www.maxrev.de/windows-position-von-apps-im-multi-monitor-betrieb-nach-aufwachen-t366585.htm#pic462673 (2认同)

Gar*_*rey 7

并非所有 NVidia 卡都支持伪造 EDID 的能力,并且不仅仅是睡眠导致此问题。如果显示器关闭或短暂断开连接,可能会对精心配置的屏幕布局造成严重破坏。由于这里的所有解决方案都不适合我,我编写了一个实用程序来在监视器数量发生变化时恢复窗口位置。可在此处获取源代码。

  • 我已经测试了 @GarrGodfrey 的程序,它的效果非常好。 (2认同)

deu*_*ion 6

可能有一个正式的解决方案即将出现:

https://devblogs.microsoft.com/directx/avoid-unexpected-app-rearrangement/

请注意:目前仅适用于 Windows 10 Insider build 21287及更高版本。

我将编辑此答案以反映未来 Windows 版本中的更改和包含;额外的帖子,因为它是一个完全不同的解决方案。

  • 看到这篇博文,也想找到这个老问题并在其中发帖,但你打败了我 (2认同)

rio*_*fly 5

我用这个小应用程序解决了:
https ://github.com/hunkydoryrepair/MonitorKeeper/releases

只需运行它,它就会将窗口保持在相同的位置。
非常感谢@hunkydoryrepair。