ATI, Displays (Monitore) programmatisch tauschen



  • Mit unseren ATI Grafikkarten ergibt sich ein recht komisches Phänomen, und zwar dass, wenn zwei Monitore angesteckt sind, immer der analoge "\.\DISPLAY1" ist.

    Dummerweise bräuchten wir die Zuordnung aber so, dass immer der "untere" Stecker "\.\DISPLAY1" ist und der "obere" Stecker "\.\DISPLAY2". So wie es auch ist wenn zwei analoge oder zwei digitale Monitore angesteckt sind.

    ("\.\DISPLAY1" ist in unserem Fall, da Windows XP, auch immer der "1" Monitor in den "Display Properties" und "\.\DISPLAY2" der "2" Monitor -- d.h. dort sind die Monitore dann leider auch vertauscht.)

    Zwei Fragen:

    1. Lässt sich irgendwie über ein Programm rausbekommen ob die Displays vertauscht wurden?
    2. Wie tauscht man die Displays wieder zurück?

    Das ganze muss automatisch passieren, also "nachsehen und ggf. im Control Center die Displays swappen" ist keine Lösung.



  • Ich kenn leider keinen Weg um die Monitorkonfiguration zu ändern. Warum könnt ihr eurer Software denn nicht einfach beibringen die aktuelle Monitorkonfiguration auszulesen und sich entsprechend zu verhalten!?



  • Das ist ein embedded System. Da hängt ein Kastl irgendwo, Update-Platte rein, Software wird aufgespielt, Update-Platte wieder raus, einschalten, muss laufen.

    Und dazu müssen wir wissen welcher Monitor am "unteren" Anschluss der Grafikkarte angeschlossen ist und welcher am "oberen". Weil am "unteren" der interne Monitor angeschlossen ist (via DVI), und am "oberen" kann der Kunde anhängen was er mag. Und wenn er was analog anhängen mag, dann stimmt die Reihenfolge in Windows auf einmal nichtmehr mit der erwarteten überein, und wir sind angeschissen.

    Bis jetzt hab' ich noch nichtmal nen Weg gefunden das auszulesen. Also herauszubekommen welches "Display Device" zu welchem Anschluss gehört.

    Ich sehe mir gerade die AMD Display Library an, aber so ganz blicke ich noch nicht durch - allerdings sitze ich da auch erst seit 2-3 Stunden dran. Und die Samples sind sehr bescheiden.



  • OK offenbar kann man mit ChangeDisplaySettingsEx() auch das Monitorsetup verändern, daran hatte ich nicht gedacht. Das aktuelle Setup kannst du dir z.B. mit EnumDisplayMonitors() holen. Damit bekommst du alle Monitore und Informationen wie z.B. welchen Bereich am virtuellen Desktop der Monitor einnimmt. Über GetMonitorInfo() kommst du auch drauf ob es sich um den primären Monitor handelt oder nicht.

    Vielleicht kannst du damit ja schon was anfangen...



  • Ich versteh' grad gar nix 😕
    Wo (virtuelle Koordinaten) die Monitore gemappt sind etc. ist erstmal egal, genauso Auflösung etc.

    Ich bin nicht sicher ob du verstanden hast worum es hier geht, ich versuch' es nochmal besser zu erklären.

    ----

    Was ich versuche rauszubekommen, ist, welcher "Display Monitor" an welchem *physikalischen* Anschluss (DVI-Stecker) der Grafikkarte hängt.

    Der Device-Name (lpszDeviceName) den man für ChangeDisplaySettingsEx() braucht ist "\.\DISPLAY1" bzw. "\.\DISPLAY2".

    Normalerweise ist dann die Zuordnung
    "\.\DISPLAY1" = unterer DVI-Stecker
    "\.\DISPLAY2" = oberer DVI-Stecker

    Hängst du aber am unteren DVI-Stecker was digitales an, und am oberen was analoges, dann ist die Zuordnung genau verkehrt rum:
    "\.\DISPLAY1" = oberer DVI-Stecker
    "\.\DISPLAY2" = unterer DVI-Stecker

    Anders gesagt: wenn er ein analoges und ein digitales Gerät findet, dann "bevorzugt" er das Analoge, und weist diesem immer "\.\DISPLAY1" zu.

    Und das müssen wir wie gesagt a) rausbekommen und dann idealerweise b) wieder zurücktauschen (weil wir sonst ein paar recht haarige Stellen ändern müssten, die ich lieber nicht angreifen möchte).



  • Mir ist schon klar was du meinst nur ist mir kein Weg bekannt um an diese Information zu kommen, wenn dann eben vielleicht über irgendwelche herstellerspezifischen APIs (wie eben diese ADL, wobei ich auf den ersten Blick da nix drin gefunden hab was irgendwie hilfreich ausgeschaut hätte). Es hätte ja sein können dass, auch wenn die Device Namen sich ändern, z.B. der Primäre Monitor sich nicht ändert und du so oder z.B. eben über die Desktopkoordinaten rausfinden könntest welcher Monitor jetzt der richtige ist...



  • Es müsste mit der ADL_Display_DisplayMapConfig_Set Funktion gehen.
    Jetzt muss ich nur noch rausbekommen was die ganzen Parameter bedeuten.


Anmelden zum Antworten