So, I’m having an issue at work with my display setup. I have three monitors connected to my workstation, two via DisplayPort and one via DVI. Every time the monitors go to sleep it does the following:
- Windows gets a signal that the monitor has been disconnected
- Windows then re-arranges the windows that I had on the display port monitors to a desktop that it considers active(The DVI monitor)
When the monitor wakes up, I have to re-arrange my windows back to where I want them and this is an incredibly annoying task, especially as I take numerous coffee and bio breaks daily.
This is not special to any graphics card and there are numerous posts on this issue. This is the behavior of display port as it’s supposed to be “Plug and Play”. if I pull out the cable, that makes sense. However, powering off shouldn’t exhibit the same behavior as unplugging. Nvidia has a solution implemented in their drivers, that basically stores the monitor information and brute forces the state of the screen. However, I’ve got an AMD card on my workstation and it currently has no solutions.
So what’s my solution? I’m going to write one for a Random Coding project. I’ll have it freely available to download and will have a little bit of a video on the usage of it. While it may be interesting recording writing it from scratch and the dev journal, my schedule is insanely fragmented these days with two little boys and it would be hard to record as most of the days I’ll work on the project, lighting and my voice has to be low to let those guys sleep.
So MVP specs to get something out the door. Begin by building a polling implementation application that’s manually started with a window. Later we’ll try to find the right windows events, make it event driven and modify it to be a task tray application.
- Create a hash of the desktop display metrics as the key and a list of the window display metrics as a value
- Poll Number of monitors and screen resolutions and store as desktop display metrics
- Every second scan all windows and store window display metrics
- If the desktop display metrics change, check if the desktop hash key exists
- If it exists restore window positions.
- If it doesn’t store new positions of all windows