Seite 1 von 2

Monitordaten über DDC direkt auslesen

Verfasst: 25.08.2014 19:00
von TheCube
Ich möchte die DDC Daten zur Kontrolle direkt vom Monitor auslesen, da dieser im Betrieb (ohne Neustart)
gewechselt wird. Die ganzen Registry-Auslesereien helfen also nicht weiter. (nutze da WinXP-32)

Unter DOS ist da ja kein Problem das Monitoreeprom via DDC (auch nur´n I²C-Bus) auszulesen,
und Windows selbst macht das schließlich auch hier und da.

Bei meiner (nicht sehr erfolgreichen) I-Net Suche bin ich über die Win32_DesktopMonitor WMI class
gestolpert, weiss aber nicht ob es damit geht und wie man die 128 Bytes auslesen/ablegen könnte.
( 00,FF,FF,FF,FF,FF,FF,00, .....Daten.... )

Wenn mir da jemand ein Schubs in die richtige Richtung geben könnte ... wäre super. :praise:

Re: Monitordaten über DDC direkt auslesen

Verfasst: 25.08.2014 19:55
von RSBasic
Welche Monitor-Informationen benötigst du genau?

Re: Monitordaten über DDC direkt auslesen

Verfasst: 25.08.2014 21:40
von TheCube
Am besten und universellsten wären einfach die rohen Bytes des Monitor-Eeproms.

Ich würde auch aber mit dem Monitornamen oder der physikalischen Auflösung auskommen,
wenn diese geparsten Daten irgendwo im System Sekunden-zeitnah aktuell sind.

Aufgabe vereinfacht dargestellt:
Windows-PC bootet mit Standard-Consumer-Arbeitsmonitor (VGA) und Testmonitor (DVI), Darstellung gecloned.
Selbstgemachte PB-exe starten, diese prüft das Testmonitor-Eeprom
alle paar Sekunden auf korrekte Datenbytes (der Inhalt ist bekannt da von mir ... <) )
Wenn OK wird der Testmonitor auf einen nächsten umgestöpselt, usw. usw.
Bei falscher Monitor-"Programmierung" oder korrupten Bytes wird eben ein Fail-Fenster gezeigt.
(Das wird auf dem folgenden Testmonitor auch sauber angezeigt, selbst wenn dessen Eeprom fehlt.)

Der Arbeitsmonitor ist nicht zwingend erforderlich, falls zwei angeschlossene Monitore die Sache
unnötig verkomplizieren würden.

Idee Plan B: Windows per Programm zwingen, die Registrydaten bzgl. der angeschlossenen Monitore zu aktualisieren.
Dann könnte man sie dort nach Bedarf abholen. Wäre ja u.a. dank der WinAPI-Library kein Problem ... :allright:

Re: Monitordaten über DDC direkt auslesen

Verfasst: 26.08.2014 10:14
von Danilo
TheCube hat geschrieben:Ich würde auch aber mit dem Monitornamen oder der physikalischen Auflösung auskommen
Sendet Dir WinXP ein #WM_DISPLAYCHANGE wenn Du einen neuen Monitor ansteckst?
Dann kannst Du ja die Auflösung einfach über EnumDisplayMonitors_() bekommen.

EDIT: Beispielcode entfernt, da er nicht schön formatiert war.

Verfasst: 26.08.2014 10:35
von CodeCommander
Danilo, warum meidest du Leerzeichen und mal nicht? Mal nach Komma kein Leerzeichen und bei = machst du doch Leerzeichen rein.
1. Uneinheitlich geschriebener Code
2. Ohne Leerzeichen sieht der Code unübersichtlich und hässlich und unlesbarer aus vorallem sowas:

Code: Alles auswählen

OpenWindow(0,0,0,640,480,"Monitor Info",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
:freak:
Viel besser:

Code: Alles auswählen

OpenWindow(0, 0, 0, 640, 480, "Monitor Info", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
:allright:
Aber jedem das seine. ;)

Re: Monitordaten über DDC direkt auslesen

Verfasst: 26.08.2014 10:39
von ts-soft
Da hat die Ansicht des Boards umgebrochen, nicht der Code! Ein paar Leerzeichen zwischen den Parametern
könnten aber nicht schaden.

Re: Monitordaten über DDC direkt auslesen

Verfasst: 26.08.2014 10:43
von Danilo
CodeCommander hat geschrieben:Aber jedem das seine. ;)
Danke! Weshalb dann überhaupt Dein Kommentar?

Verfasst: 26.08.2014 10:48
von CodeCommander
ts-softeis hat geschrieben:Da hat die Ansicht des Boards umgebrochen, nicht der Code! Ein paar Leerzeichen zwischen den Parametern
könnten aber nicht schaden.
Sehe ich das richtig dass wir beide einer Meinung sind? Dass ich das noch erleben darf :)
Danielo hat geschrieben:Danke! Weshalb dann überhaupt Dein Kommentar?
Weil du die PureBoard Leute berücksichtigen musst. :D Was für unsauberen Code du in deiner Freizeit produzierst ist deine Sache, da hast du recht, aber wenn du keine Leerzeichen benutzt und postest deinen Code dann gibt es bei Leuten mit kleineren Bildschirmen keinen Umbruch. Nicht jeder hat einen 80" Bildschirm. :D

Re: Monitordaten über DDC direkt auslesen

Verfasst: 26.08.2014 10:57
von Danilo
CodeCommander hat geschrieben:Weil du die PureBoard Leute berücksichtigen musst. :D Was für unsauberen Code du in deiner Freizeit produzierst ist deine Sache, da hast du recht, aber wenn du keine Leerzeichen benutzt und postest deinen Code dann gibt es bei Leuten mit kleineren Bildschirmen keinen Umbruch. Nicht jeder hat einen 80" Bildschirm. :D
Tut mir sehr leid, habe aber leider momentan keine Zeit das nach Deinem Geschmack neu zu formatieren.

Re: Monitordaten über DDC direkt auslesen

Verfasst: 26.08.2014 16:44
von TheCube
Danilo hat geschrieben:
TheCube hat geschrieben:Ich würde auch aber mit dem Monitornamen oder der physikalischen Auflösung auskommen
Sendet Dir WinXP ein #WM_DISPLAYCHANGE wenn Du einen neuen Monitor ansteckst?
Dann kannst Du ja die Auflösung einfach über EnumDisplayMonitors_() bekommen.

EDIT: Beispielcode entfernt, da er nicht schön formatiert war.
Ich prüfe das mit dem #WM_DISPLAYCHANGE auf dem Uralttestrechner nochmal,
könnte gut sein das es auch so funktioniert. Auf einem modernen Win7-Rechner
(der das ab und abstöpseln eines zweiten Monitors wie bei einem USB-Gerät mit einem Signalton quittiert)
funktioniert zumindest der Codeschnipsel aus der WinAPI-Library schonmal.
http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
D.h. man liest wirklich den Jetztzustand ein, und nicht die Konfiguration vom Booten des Systems.
Leider wird der Monitorname in dem Beispiel nicht ausgelesen.

Danke erstmal dafür :allright: .... und schade um dein Beispiel wegen dem nicht-so-schön formatierten Code. :roll: