Solution for Windows waking up from sleep mode with window shifted to the top left corner and reduced in size

Ever since I switched back to a 2K monitor at home, every time I wake the computer from sleep, all open windows end up in the upper-left corner and their size is reduced to half of what it was. Strangely, these windows still appear to be in maximized state. The culprit behind this issue is the DP's Hot Plug Detection feature.

This post was translated from my Chinese blog post with the aid of ChatGpt.

A Straightforward Solution

Forewarning, editing the registry carries risks. Please proceed with caution.

Press WIN + R, type regedit, and press Enter to open the Registry Editor. Navigate to the following location:

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers

Although I forgot to take a screenshot here, I’m using an image from another computer to illustrate. In essence, you will find many records within the following three paths, which store settings related to previously connected monitors, as shown below:

1
2
3
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Connectivity
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\ScaleFactors

Placeholder.png

把这三个里面的记录全部删掉然后重启,重启后Windows会重新识别现在连接的显示器,如下图所示
新的.png

Usually, at this point, the issue should be resolved. Restart your monitor or perform a sleep-wake cycle to re-detect. If the problem persists on your computer, try turning off the monitor’s power switch and then turning it back on. Afterward, refresh the Registry Editor. You’ll notice a new entry under Configuration called NOEDIDxxxxxxx. Next, modify the values of PrimSurfSize.cx and PrimSurfSize.cy in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\NOEDIDxxxxxxx\00 to match the current resolution of your display. Please note that there is another 00 within this 00, and you should modify the values inside it as well.
Another.png

Reference1: Stefan Traistaru
Reference2: atwitsend42

If you want to understand the reason, please continue reading.

Principle

Hot Plug

A convenient feature of most modern displays is the ability to “hot plug” into the source device while both are powered, and immediately begin functioning with correct display settings.

This behavior is facilitated by three functionalities: hot plug detection, Display Data Channel (DDC), and Extended Display Identification Data (EDID).

Hot Plug Detection

Hot plugging a display into a signal source means making the connection while both devices are powered. This is different from older technologies, which often required a “cold plug” with one or both devices powered down. Hot plug detection, or HPD, is a feature in HDMI, DisplayPort, and DVI specifications. It typically relies on a pin in the connector making contact to initiate the process.

DDC

The Display Data Channel (DDC) describes the protocol and physical path used for communication between the signal source and the display. It’s usually assigned to one or more pins on the interface and carries the EDID.

DisplayPort uses a versatile “AUX channel” instead of a dedicated DDC, serving as a medium for both user data (often USB) and a means of transmitting EDID and other topology information.

EDID

Extended Display Identification Data (EDID) is information provided by the display to describe its capabilities and requirements to the source device. It includes details such as manufacturer, serial number, maximum resolution, refresh rate, and color space.

Culprit

When a display is turned off or enters sleep mode, it sends a signal over DDC indicating that it’s powering down. In some cases, this is interpreted by the system’s video driver or operating system as the display being unplugged. This results in the operating system rearranging desktop space and windows in a less-than-ideal manner.

Source:Hot Plug Detection, DDC, and EDID

Taking my monitor as an example, its original resolution is 2560x1440. However, when the monitor is turned off, the system assumes it has been unplugged. If the monitor isn’t detected, the system resorts to the default resolution stored in the registry, which is the aforementioned NOEDIDxxxxxxx. In my case, this default resolution is 1024x768. When the monitor is turned on again, you might hear hardware plug-and-play sounds, indicating that the monitor is treated as a newly connected device. After the monitor is turned on, the resolution of all windows doesn’t change; it remains at 1024x768. This results in the perception that the windows occupy only half of the screen. Since the Windows window’s screen coordinate origin is in the upper-left corner, all windows end up crammed into the upper-left corner.

NOEDID

NOEDID stands for “No EDID.” If the system cannot retrieve the Extended Display Identification Data (EDID) from the monitor, it will use this configuration. This file is generated automatically when the monitor is turned off or disconnected.

Other Solutions

Reduce Refresh Rate

It’s hard to believe that this method is actually suggested in a Dell official article. This absurd solution involves monitors like UP3214Q, P2715Q, P2415Q, etc. The suggestion is to lower the monitor’s refresh rate from 60Hz to 30Hz. This article was published in 2021, and who would want to work with a 30Hz refresh rate in 2021? It’s even difficult to scroll smoothly with such a low refresh rate.

Source:Display Windows Move or Resize After Resuming from Sleep State

Switch to HDMI Port

After all, this issue is unique to DP (DisplayPort). Switching to an HDMI connection naturally resolves the problem. 🐶

Adjust Monitor Hot-Plug Detection Settings

Navigate to the monitor’s OSD menu and set DP Hot-Plug Detection to Always Active. However, this solution doesn’t apply to all monitors; only some monitors have this feature.

Source:Windows are resized and moved to upper-left corner of screen when monitor wakes up from sleep [SOLVED, ON MY SYSTEM]

Hardware Dongle

Introducing a hardware dongle between the monitor and the host to deceive the host can be a solution, but it comes with an additional cost.

Historical Perspective - Negligence

Interestingly, a similar issue surfaced back in 2010. Someone discussed it on NVIDIA’s Reddit community. However, over a decade has passed, and whether it’s Microsoft, NVIDIA, AMD, or Intel, no one has stepped up to address this problem. Some individuals even reached out to VESA (Video Electronics Standards Association) via email, but VESA responded that while they are aware of the issue, it should be resolved by monitor manufacturers, not them – effectively passing the buck.

Earliest discussions

I drew an emoticon for them.🐶

摆烂.webp