Monitordaten über DDC direkt auslesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Monitordaten über DDC direkt auslesen

Beitrag 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:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Monitordaten über DDC direkt auslesen

Beitrag von RSBasic »

Welche Monitor-Informationen benötigst du genau?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Monitordaten über DDC direkt auslesen

Beitrag 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:
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Monitordaten über DDC direkt auslesen

Beitrag 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.
Zuletzt geändert von Danilo am 26.08.2014 10:52, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag 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. ;)
Zuletzt geändert von CodeCommander am 18.01.2015 14:32, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Monitordaten über DDC direkt auslesen

Beitrag von ts-soft »

Da hat die Ansicht des Boards umgebrochen, nicht der Code! Ein paar Leerzeichen zwischen den Parametern
könnten aber nicht schaden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Monitordaten über DDC direkt auslesen

Beitrag von Danilo »

CodeCommander hat geschrieben:Aber jedem das seine. ;)
Danke! Weshalb dann überhaupt Dein Kommentar?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag 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
Zuletzt geändert von CodeCommander am 18.01.2015 14:32, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Monitordaten über DDC direkt auslesen

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: Monitordaten über DDC direkt auslesen

Beitrag 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:
Antworten