UPDATE: For anyone who had this issue (small windows in upper left corner when waking up from sleep), but DDU didn't solve the problem, I recently came across the same thing and found a fix. It involves making a few simple registry edits. Before doing anything I spell out here, be sure to
backup your registry using the simple steps on this link. Just in case anything funny happens (which it shouldn't), you will be able to revert back the registry as though no changes were made if you follow the simple instructions at that same link for restoring the registry from a backup. Also, for general background (totally optional) on editing the registry,
read this.
Don't be scared: I know this looks complication because the post is long, but it really isn't. There's just a lot of words because I want to explain carefully and prevent confusion as much as possible.
Okay, after you have have a backup, open the registry editor (type "regedit" in start menu and open it . . . blue icon of floating cubes). Then navigate to the source of the resolution issue, which is at at the following location:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
Look under the "Configuration" key (I know they look like folders, but they are called "keys" in the registry context). You'll see a list of keys, and each corresponds to some display configuration that Windows will use in various contexts. For instance, I have a Dell monitor and an Nvidia GPU, so some of the keys under "Configuration" start with "DEL" or "NV," but there are other generic keys that start with something random like "NOEID." Whatever you have there, they all have the same keys listed underneath, and those are what you need to edit.
Expand each Configuration key one level to expose the key called "00" (some may also have more than one number, so "00" and "01"). Just click on the number key, but don't' expand it. For instance, here is the key location for the number under my Dell display's key, where the
bolded part shows the display's whacky--long registry name:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\
DELA0A768MCF4CN0ARL_34_07DE_11^9D4D7E896DC19AE06E5F31DD70B7C087\00
If you click on the "00" (or "01" if you have one), there will pop up a list on the right of files with either a blue or red icon listed under the "name" column. Those are the registry entries for the display configuration. If you have this problem, then three of the entries under the "00" or "01" for your display configurations will have the wrong resolution information. You'll have to enter it manually.
To find the correct information to enter, focus on these three entries under "00" or "01" for your display: (1) PrimSurfSize.cx, (2) PrimSurfSize.cy, and (3) Stride. The first two define your resolution for whatever display configuration you're looking at. To find which display is your monitor, click through the "00" or "01" key under each display until you find your resolution in parenthesis under the "Data" column corresponding to the entries PrimSurfSize.cx and PrimSurfSize.cy. For instance, my display was under one of the keys beginning with "DEL." My resolution is 3440 x 1440, and I found that PrimSurfSize.cx says "(3440)" and PrimSurfSize.cy says "(1440)" under the Data column for one of the display configurations. This is imporant to note because you can't just type in "3440" or "1440," or whatever resultion you have. You need to type in the code displayed
next to the resolution value. For instance, the full entry under "Data" for PrimSurfSize.cx is "0x00000 d70 (3440)." That tells me the code for my X resolution value of 3440 is actually "d70." Similarly, the full entry under "Data" for PrimSurfSize.cy is "0x00000510 (1440)." That tells me the code for my Y resolution value of 1440 is actually "5a0." Finally, the full entry under "Data" for Stride is "0x00003600 (13824)." That tells me the code for my stride value is "3600." Get it? The zeros are just place holders. So take note in this fashion of all entries under the "00" or "01" key for your display (i.e. write if down somewhere, or take and print a screen shot - whatever. Just have it.).
Now click through the "00" (and if applicable "01" or higher) keys under each display configuration. Do any of the values change compared to the values set in your display, which is the one whose values you just noted? If not, then that's fine. The display values are correct. Move on. Keep going until you find entries that differ from the ones you noted. When you find a difference, double click the entry (i.e. the red or blue icon under the "Name" column). Enter the code you noted for that entry. On my display, the PrimSurfSize.cx and PrimSurfSize.cy were set to a resolution of 640 x 480, so I entered in the codes for 3440 x. 1440; that is, I entered "d70" and "5a0" in to PrimSurfSize.cx and PrimSurfSize.cy, respectively. Make sure all of the entries match the ones you noted. Then exit RegEdit, and restart your computer.
This will force Windows into always thinking is a space defined by your actual resolution, even when it goes to sleep. To test it, open some windows and scatter them around the screen. Be sure to spread them around. Then put your computer to sleep by either clicking "Sleep" from the start menu or pressing your power button, and then wake it back up. Your windows will now be in the same exact configuration, and they will not bunch up in the upper-right of the screen. That happened because Windows would switch to a sleep resolution, but the registry edit you just did redefined the sleep resolution as your actual resolution. Problem solved!
Note that I've only tried this on a single display. I don't know what happens on multiple displays, but it's worth a shot. As long as you backed up the registry before making any changes, you'll be able to undo anything you change.
Hopefully this helps some people, because it was a pain in the A$$ for me to find! Good luck!