[LOGGED] Isadora and Windows display settings not matching
-
@mark_m I had the same issue and also made a bug report and post. I could not get back to the system to make a video of it as I left for a tour with different gear.
-
Dear All,
@DusX has brought this to my attention and put it in our "hot list" again. We will revisit this problem.
Regarding Isadora's numbers matching the Displays Control Panel object, I had researched this extensively during the development of Isadora because we saw that it was a problem. What I found was this thread: https://social.msdn.microsoft.... and particularly this response from the Microsoft Shell team, who manages this part of the operating system.
"I discussed this with the Shell team. Here is the team's response: There is not a supported way to figure out the IDs that you referred to programmatically. It was never a design goal to provide a way for applications to label monitors with the same IDs that the screen resolution control panel uses. What is your application trying to accomplish?"
The responses to the Microsoft "answer" start with "With all due respect, I find the answers given to the OP by your team a cop-out and frankly nonsensical" which echoes my own feeling as I read Microsoft's answer. (Also take note of the comment "Any chance you have an answer to this question, after almost 10 years?")
To the point: the last response in the thread echoes the problems you outline here: the person tried the code that was offered, but says thtat "DISPLAY1 corresponds to the external monitor which should be #2 and DISPLAY2 is the built-in, which should be #1." In other words, the code discussed there doesn't solve the problem.
I tried all the potential solutions offered there, and others of my own design, but eventually I gave up trying because none of them worked. We will look into it again and see what we can find out. But I'm not terribly hopeful I'm afraid.
Best WIshes,
Mark -
Thanks for pursuing this. Very much appreciated. Hopefully things have moved on since those posts, especially as multi-monitor configurations have become much more common. If I can help in any way do let me know. Our show runs on the Hades Canyon computer in my sig, all off the same graphics card, and I use one 1920x 1080 monitor and three 1400 x 1050 projectors. I've plenty of time to test stuff at the moment.
All the best from Mark in will-we-won't-we-Brexit-Britain
-
@mark_m said:
Hopefully things have moved on since those posts, especially as multi-monitor configurations have become much more common.
The fact that these are old posts, and that they have no followup solutions, is unfortunately not a good sign. Again, I researched this extensively and as far as I can determine,, Microsoft has never addressed this issue.
But to give a few more examples, just so you know I'm not being lazy here:
See https://stackoverflow.com/ques... "Windows does not provide a function that allows applications to obtain the numbers used by the display settings app. The numbers themselves are specific only to the display settings app and have no meaning in the system or in the CCD APIs used to query/set the display topology"
And here: https://stackoverflow.com/ques... "Also, the order that monitors are returned by EnumDisplayMonitors appears to be random. Most of the time it will return them in the same order, but if you have 2 video cards driving 3 monitors, it can change around."
https://stackoverflow.com/ques... -- Unanswered.
I will nevertheless spend time looking again to see if anything else shows up.
Best Wishes,
Mark -
@mark said:
just so you know I'm not being lazy here:
That is the last thing I think anyone could ever accuse you of!!
What about a different approach, which is to use the EDID information from each display?
The aim is for the same stage to open on the same display each time. It's not strictly necessary for the displays as enumerated by Windows to match the displays as enumerated by Isadora.
Each display has unique properties which are in the EDID, including the serial number.
Is there a way to use the serial number of a display to wed it to a stage?
Using this utility I can see the EDID for each display, and read the serial number and the registry entry.
Seeing which physical display has which serial number is easy: it's on the display itself and also often accessible from the display's menu. So if I can assign stage to display using the serial number from the EDID information, and Isadora will always say "Stage One is DELLP2715Q V48W2713BQAL (and not DELLP2715Q 32R1F4AA290L) then my problem would be solved. I think.
Of course I have no idea if this is possible / plausible or just plain laughable! But throwing it out there.... -
Just throwing my 5 cents into this discussion..
Is the number not based on the hardware port of the configuration of the PC / Laptop ?
It seems that we can enumerate through the adapters using DXGI to get the display name and System ID / what type of screen this is connected through.. Perhaps this array is sorted by index that matches the screen and the name inside the value of the array is the screen itself ? Just throwing some balls out there :)
-
@juriaan said:
It seems that we can enumerate through the adapters using DXGI to get the display name and System ID / what type of screen this is connected through
This does not seem to be true. I created a command line app called DXGIEnumeration to list the connected displays through this method. I tried several tests, but this scenario shows the disconnect between the Monitors control panel and the DXGI list.
1) Start from this setup:
1080p Monitor is on left is Display #2
4K Monitor on right is Display #1
2) Run DXGIEnumeration
Adapter: 0, description: NVIDIA GeForce GTX 1060
Adapter: 1, description: Microsoft Basic Render Driver
Found monitor 0 on adapter: 0
Found monitor 1 on adapter: 0
Monitor: \\.\DISPLAY2, pos = 0, 0, size = 1920 x 1080, attached: YES
Monitor: \\.\DISPLAY1, pos = 1920, 0, size = 2560 x 1440, attached: YESSo, this yields the following:
1080p Monitor: Index In List = 1, Name = DISPLAY2
4K Monitor: Index In List = 2, Name = DISPLAY13a) Unplug and 4K Display
3b) Reboot and wait until reboot complete
3c) Replug 4K Display4) Displays Control Panel looks like this now
So the order would seem to be intact. But then...
5) Run DXGIEnumeration
Adapter: 0, description: NVIDIA GeForce GTX 1060
Adapter: 1, description: Microsoft Basic Render Driver
Found monitor 0 on adapter: 0
Found monitor 1 on adapter: 0
Monitor: \\.\DISPLAY1, pos = 0, 0, size = 1920 x 1080, attached: YES
Monitor: \\.\DISPLAY2, pos = 1920, 0, size = 2560 x 1440, attached: YES1080p Monitor: Index In List = 1, Name = DISPLAY1
4K Monitor: Index In List = 2, Name = DISPLAY26) Swap left and right monitor in Displays Control panel and then reboot
#1 = 4K Display on left
#2 = 2K Display on right
7) Run DXGIEnumerationAdapter: 0, description: NVIDIA GeForce GTX 1060
Adapter: 1, description: Microsoft Basic Render Driver
Found monitor 0 on adapter: 0
Found monitor 1 on adapter: 0
Monitor: \\.\DISPLAY2, pos = 0, 0, size = 1920 x 1080, attached: YES
Monitor: \\.\DISPLAY1, pos = -3840, 0, size = 2560 x 1440, attached: YE1080p Monitor: Index In List = 1, Name = DISPLAY2
4K Monitor: Index In List = 2, Name = DISPLAY1The names change back but the order of the list did not change even though the horizontal order did indeed change.
FINDINGS
There is no consistent relationship between the Displays Control panel numbering and the output of the DXGI scan. :-(
Does anyone feel that I'm missing something???
I can tell you in advance that the other methods Windows offers to enumerate the displays suffer from the same problems.
In terms of @mark_m 's idea to use the monitor serial numbers: it could work, but I've seen multiple cases in our tests where that serial number is not present (i.e., a blank string) or -- in one case I remember -- was identical for two different monitors of the same make and model. It might work in some cases, but not all -- though I suppose success in some situations better than no success.
Here's the DXGIEnumeration app for your sleuthing pleasure.
Best Wishes,
Mark
-
Thanks, @mark for your investigations....
This is what I getAdapter: 0, description: NVIDIA GeForce GTX 980
Adapter: 1, description: Microsoft Basic Render Driver
Found monitor 0 on adapter: 0
Found monitor 1 on adapter: 0
Found monitor 2 on adapter: 0
Monitor: \\.\DISPLAY1, pos = 0, 0, size = 2560 x 1440, attached: YES
Monitor: \\.\DISPLAY2, pos = 3840, 0, size = 2560 x 1440, attached: YES
Monitor: \\.\DISPLAY3, pos = -1920, 0, size = 1920 x 1200, attached: YESWhere my setup is like this:
So there's something a little awry here: what the DXGIEnumeration tool reports as Display 1 the Windows Display Control Panel reports as Display 2, and likewise Display 2 in DXGIEnumeration is Display 1 in Display Control Panel. They do agree on Display 3 though... :-)
Maybe not relevant at all, but why is it reporting our UHD (3840 × 2160) monitors as 2560 x 1440px?
Cheers
Mark -
Well,
I'm not sure about why it's reporting the resolution incorrectly. I created this app only to show that I'm taking this seriously and investigating every avenue. I'm not going to spend any time working on DXGIEnumeration because, bottom line, the DXGI API does not give me the information I need to match the display order shown in the control panel.
I will add that it is frustrating for me that at 30+ years into the development of the personal computer, we can't reliably depend on the monitor order and that the operating system gives little aid in managing this.
Best Wishes,
Mark -
Thank you for taking this seriously and investigating every avenue. I can only imagine the frustration...