EDID / DDC Daten direkt vom Monitor lesen

  • Ich muss (direkt vom Monitor) die DDC Daten auslesen und diese dann weiterverarbeiten.
    Es gibt diverse Lösungen, aber die lesen alle bloss die Registry aus oder verwenden externe Tools die leider nicht unter Win7 64Bit laufen.

    Die Registry kann ich nicht verwenden, da an diesen PC laufend neue Monitore (im laufenden Betrieb) angeschlossen werden. Bei diesen Monitoren muss geprüft werden, ob sie DDC Daten korrekt senden.

    Hier habe ich was interessantes gefunden. Kann das jemand in AutoIt umsetzen?
    Link

    Vielen Dank für Eure Hilfe!
    Veronesi

    Einmal editiert, zuletzt von veronesi (17. Mai 2011 um 15:03) aus folgendem Grund: Ist nun nicht mehr vom Monitor direkt, sondern von der Registry, aber in Echtzeit.

  • Ich habe mir den Link nun selber mal genauer angeschaut und gesehen, dass es wohl sehr kompliziert werden würde, das auszulesen.
    Kennt denn jemand wenigstens ein unter Windows7 64bit lauffähiges Programm um die EDID (DDC) Daten direkt vom Monitor zu lesen und das ganze irgendwie per StdOut/In in AutoIt einzulesen?

    PS: das Programm softMCCS kenne ich, lässt sich aber nicht automatisieren und funktioniert unter Win7 / 64bit nicht immer zuverlässig.

    Vielen Dank für Eure Inputs!

  • Hier habe ich auch noch einen Link gefunden.
    Anscheinend will diese Person ebenfalls die EDID Daten direkt vom Monitor lesen und hat ein Programm dazu geschrieben (C++)
    Allerdings scheint er Probleme beim kompillieren zu haben.

    Wie dem auch sei: Vielleicht kann man aus dem Code Ideen nehmen um meine Frage umzusetzen?
    Kann jemand mit C++ Kentnissen diesenLink mal anschauen?

  • Für Linux wüsste ich was um eine edid.bin zu erzeugen, damit das Bild auch passt wenn der VDR ohne Display startet
    also halt die Kommunikation nicht stattgefunden hat.

    Ist außerdem meine ich für NV "optimiert".

    http://www.htpc-forum.de/forum/index.php?showtopic=7638

    Vielleicht kann man da was abgucken um es für Win gängig zu machen wobei Linux in solchen Fällen doch gesprächiger ist. :)

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    • Offizieller Beitrag

    Ich hatte mal dieses Skript archiviert:

    Spoiler anzeigen
    [autoit]


    ; Retrieve Monitor Model and Serial
    ; 13 November 2005 by Geert (NL)
    ; used parts made by archrival (http://www.autoitscript.com/forum/index.php?showtopic=11136)
    ; Edited/upgraded by rover 20 June 2008

    [/autoit] [autoit][/autoit] [autoit]

    ; Collect EDID strings for all active monitors

    [/autoit] [autoit][/autoit] [autoit]

    ;Links
    ;http://en.wikipedia.org/wiki/Extended_…tification_data
    ;http://www.lavalys.com/forum/lofivers….php/t1829.html
    ;http://cwashington.netreach.net/depo/view.asp?…ptType=vbscript

    [/autoit] [autoit][/autoit] [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    Opt("MustDeclareVars", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; ConsoleWrites slow a script if not needed
    Global $bDebug = True ; change to False or comment out/remove ConsoleWrite() lines if debugging to console not needed

    [/autoit] [autoit][/autoit] [autoit]

    Global $bDisplayAll = False ; if false only 'Active' monitors (reg entries with 'Control' key) with EDID info reported
    ; 'Active' monitors with no reported EDID data(serial, name, date) are ignored

    [/autoit] [autoit][/autoit] [autoit]

    Global $asEDID[1][2] = [[0, 0]]
    Global $iCounterEDID = 0, $sResults
    Global $edidarray[1], $error1, $error2, $error3
    Global $iCounterMonitorName = 1, $iCounterMonitorCode, $iCounterMonitorControlFolder
    Global $sMonitorName, $sMonitorCode, $sMonitorControlFolder, $sMonitorEDIDRead
    Global $ser, $name, $j, $sManuDate, $sEDIDVer

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $sMonitorName = RegEnumKey("HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY", $iCounterMonitorName)
    $error1 = @error
    If $bDebug Then ConsoleWrite(@CRLF & '@@ Debug(' & @ScriptLineNumber & ') : $sMonitorName = ' & _
    StringStripWS($sMonitorName, 2) & @CRLF & '>Error code: ' & $error1 & @CRLF)
    If $sMonitorName <> "" Then
    $iCounterMonitorCode = 1
    Do
    ; Search 'monitor code' - e.g. 5&3aba5caf&0&10000080&01&00
    $sMonitorCode = RegEnumKey("HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & _
    $sMonitorName, $iCounterMonitorCode)
    $error2 = @error
    If $bDebug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMonitorCode = ' & _
    StringStripWS($sMonitorCode, 2) & @CRLF & '>Error code: ' & $error2 & @CRLF)
    ; Search Control folder - When available, the active monitor is found
    $iCounterMonitorControlFolder = 1
    Do
    $sMonitorControlFolder = RegEnumKey("HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & _
    $sMonitorName & "\" & $sMonitorCode, $iCounterMonitorControlFolder)
    $error3 = @error
    If $bDebug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMonitorControlFolder = ' & _
    StringStripWS($sMonitorControlFolder, 2) & @CRLF & '>Error code: ' & $error3 & @CRLF)
    If $sMonitorControlFolder == "Control" Then; Active monitor found!
    Switch RegEnumVal("HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $sMonitorName & _
    "\" & $sMonitorCode & "\Device Parameters", 1)
    Case "EDID"
    $sMonitorEDIDRead = RegRead("HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & _
    $sMonitorName & "\" & $sMonitorCode & "\Device Parameters", "EDID")
    If $bDebug Then ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sMonitorEDIDRead = ' & _
    $sMonitorEDIDRead & @CRLF & '>Error code: ' & @error & @CRLF)
    If $sMonitorEDIDRead <> "" And Not @error Then
    $iCounterEDID += 1
    $asEDID[0][0] = $iCounterEDID
    ReDim $asEDID[UBound($asEDID) + 1][2]
    $asEDID[UBound($asEDID) - 1][0] = $sMonitorEDIDRead; Add found EDID string to Array
    $asEDID[UBound($asEDID) - 1][1] = $sMonitorName
    EndIf
    Case "BAD_EDID"
    $iCounterEDID += 1
    $asEDID[0][0] = $iCounterEDID
    ReDim $asEDID[UBound($asEDID) + 1][2]
    $asEDID[UBound($asEDID) - 1][0] = "BAD_EDID"; Add BAD_EDID string to Array
    $asEDID[UBound($asEDID) - 1][1] = $sMonitorName
    EndSwitch
    EndIf
    $iCounterMonitorControlFolder += 1; Increase counter to search for next folder
    Until $error3 <> 0
    $iCounterMonitorCode += 1; Increase counter to search for next 'monitor code' folder
    Until $error2 <> 0
    EndIf
    $iCounterMonitorName += 1; Increase counter to search for next monitor
    Until $error1 <> 0

    [/autoit] [autoit][/autoit] [autoit]

    ; Extract info from collected EDID strings - Thanks archrival
    If $asEDID[0][0] Then
    For $k = 1 To $asEDID[0][0]
    Switch $asEDID[$k][0]
    Case "BAD_EDID"
    If Not $bDisplayAll Then ContinueLoop
    $ser = "BAD_EDID"
    $name = "BAD_EDID"
    Case Else
    $j = 0
    ReDim $edidarray[StringLen($asEDID[$k][0])]
    $edidarray[0] = (StringLen($asEDID[$k][0]) / 2) + 1
    For $i = 1 To StringLen($asEDID[$k][0]) Step 2
    $j += 1
    $edidarray[$j] = Dec(StringMid($asEDID[$k][0], $i, 2))
    Next
    $ser = StringStripWS(_FindMonitorSerial($edidarray), 1 + 2)
    $name = StringStripWS(_FindMonitorName($edidarray), 1 + 2)
    If $name <> "Not Found" Then
    $sManuDate = StringStripWS(_FindMonitorManuDate($asEDID[$k][0]), 1 + 2)
    $sEDIDVer = StringStripWS(_FindMonitorEDIDVer($asEDID[$k][0]), 1 + 2)
    Else
    $sManuDate = ""
    $sEDIDVer = ""
    EndIf
    If Not $bDisplayAll Then
    If $name = "Not Found" Then ContinueLoop
    EndIf
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    $sResults &= @CRLF & "Monitor #" & $k & @CRLF & "VESA Monitor ID" & @TAB & $asEDID[$k][1] & @CRLF & _
    "Serial: " & @TAB & @TAB & $ser & @CRLF & "Name: " & @TAB & @TAB & $name & @CRLF & _
    "ManuDate: " & @TAB & $sManuDate & @CRLF & "EDID: " & @TAB & @TAB & $sEDIDVer & @CRLF
    Next
    Else
    ; No EDID or BAD_EDID entries found
    $sResults = "No Monitors Found"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;Show MonitorSerial & MonitorName: no info? -> Your using a notebook right!
    MsgBox(64, "Active Monitor EDID Info", $sResults)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    #Region - Functions
    Func _FindMonitorSerial(ByRef $aArray); Thanks archrival
    If Not IsArray($aArray) Then Return
    Local $sSernumstr = "", $iSernum = 0, $iEndstr = 0
    For $i = 1 To (UBound($aArray) / 2) - 4
    If $aArray[$i] = "0" And $aArray[$i + 1] = "0" And $aArray[$i + 2] = "0" _
    And $aArray[$i + 3] = "255" And $aArray[$i + 4] = "0" Then
    $iSernum = $i + 4
    EndIf
    Next
    If $iSernum Then
    For $i = 1 To 13
    If $aArray[$iSernum + $i] = "10" Then
    $iEndstr = 1
    ElseIf Not $iEndstr Then
    $sSernumstr &= Chr($aArray[$iSernum + $i])
    EndIf
    Next
    Else
    Return "Not Found"
    EndIf
    Return $sSernumstr
    EndFunc ;==>_FindMonitorSerial

    [/autoit] [autoit][/autoit] [autoit]

    Func _FindMonitorName(ByRef $aArray); Thanks archrival
    If Not IsArray($aArray) Then Return
    Local $n = 0, $sNamestr = "", $iEndstr = 0
    For $i = 1 To (UBound($aArray) / 2) - 4
    If $aArray[$i] = "0" And $aArray[$i + 1] = "0" And _
    $aArray[$i + 2] = "252" And $aArray[$i + 3] = "0" Then
    $n = $i + 3
    EndIf
    Next
    If $n Then
    For $i = 1 To 13
    If $aArray[$n + $i] = "10" Then
    $iEndstr = 1
    ElseIf Not $iEndstr Then
    $sNamestr &= Chr($aArray[$n + $i])
    EndIf
    Next
    Else
    Return "Not Found"
    EndIf
    Return $sNamestr
    EndFunc ;==>_FindMonitorName
    #EndRegion - Functions

    [/autoit] [autoit][/autoit] [autoit]

    Func _FindMonitorManuDate(ByRef $sEDID)
    Local $wk, $yr
    $wk = Dec(StringMid($sEDID, 33, 2)) ; 10h BYTE week number of manufacture
    $yr = Dec(StringMid($sEDID, 35, 2)) + 1990 ; 11h BYTE manufacture year - 1990
    If $wk = 0 Or $wk > 52 Or $yr < 2000 Or $yr > @YEAR Then
    Return ""
    EndIf
    Return "Week " & $wk & "/" & $yr
    EndFunc ;==>_FindMonitorManuDate

    [/autoit] [autoit][/autoit] [autoit]

    Func _FindMonitorEDIDVer(ByRef $sEDID)
    Local $iEDIDVer, $iEDIDRev
    $iEDIDVer = Dec(StringMid($sEDID, 37, 2)) ; 12h BYTE EDID version
    $iEDIDRev = Dec(StringMid($sEDID, 39, 2)) ; 13h BYTE EDID revision
    If $iEDIDVer < 1 Or $iEDIDRev < 2 Then
    Return ""
    EndIf
    Return "v" & $iEDIDVer & "." & $iEDIDRev
    EndFunc ;==>_FindMonitorEDIDVer

    [/autoit]


    Vielleicht hilft Dir das ja weiter...

  • Hallo Oscar,

    vielen Dank. Das liest eben "nur" die gespeicherten EDID Daten von der Registry ab. Und bei meinen sechs Monitoren am Arbeitsplatz liefert es für keinen die EDID Daten.
    Für zwei liefert es die Seriennummer, für drei den Namen (meistens aber nicht korrekt)

    Mit dem softMCCS (käufliches Tool, welches wir haben) bekomme ich da schon viel mehr Daten. Leider läuft dies wie gesagt unter Win7 nicht immer. Und nicht immer zuverlässig.
    Und leider muss ich das ganze automatisieren.

    Trotzdem danke für Deinen Beitrag!!!
    Veronesi

  • Mithilfe diesesBeitrages und der MSDNDokumentation habe ich folgendes Script geschrieben:

    Win32_DesktopMonitor
    [autoit]

    Local $strComputer = "localhost"
    Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "/root\cimv2")
    Local $objInstances = $objWMIService.InstancesOf("Win32_DesktopMonitor", 48)
    Local $Output = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $objInstance In $objInstances
    With $objInstance
    $Output &= "Availability: " & @TAB & @TAB & .Availability & @LF
    $Output &= "Bandwidth: " & @TAB & @TAB & .Bandwidth & @LF
    $Output &= "Caption: " & @TAB & @TAB & @TAB & .Caption & @LF
    $Output &= "ConfigManagerErrorCode: " & @TAB & .ConfigManagerErrorCode & @LF
    $Output &= "ConfigManagerUserConfig: " & @TAB & .ConfigManagerUserConfig & @LF
    $Output &= "CreationClassName: " & @TAB & @TAB & .CreationClassName & @LF
    $Output &= "Description: " & @TAB & @TAB & .Description & @LF
    $Output &= "DeviceID: " & @TAB & @TAB & @TAB & .DeviceID & @LF
    $Output &= "DisplayType: " & @TAB & @TAB & @TAB & .DisplayType & @LF
    $Output &= "ErrorCleared: " & @TAB & @TAB & @TAB & .ErrorCleared & @LF
    $Output &= "ErrorDescription: " & @TAB & @TAB & .ErrorDescription & @LF
    $Output &= "InstallDate: " & @TAB & @TAB & @TAB & .InstallDate & @LF
    $Output &= "IsLocked: " & @TAB & @TAB & @TAB & .IsLocked & @LF
    $Output &= "LastErrorCode: " & @TAB & @TAB & .LastErrorCode & @LF
    $Output &= "MonitorManufacturer: " & @TAB & .MonitorManufacturer & @LF
    $Output &= "MonitorType: " & @TAB & @TAB & .MonitorType & @LF
    $Output &= "Name: " & @TAB & @TAB & @TAB & .Name & @LF
    $Output &= "PixelsPerXLogicalInch: " & @TAB & .PixelsPerXLogicalInch & @LF
    $Output &= "PixelsPerYLogicalInch: " & @TAB & .PixelsPerYLogicalInch & @LF
    $Output &= "PNPDeviceID: " & @TAB & @TAB & .PNPDeviceID & @LF
    $Output &= "PowerManagementCapabilities: " & @TAB & .PowerManagementCapabilities & @LF
    $Output &= "PowerManagementSupported: " & @TAB & .PowerManagementSupported & @LF
    $Output &= "ScreenHeight: " & @TAB & @TAB & .ScreenHeight & @LF
    $Output &= "ScreenWidth: " & @TAB & @TAB & .ScreenWidth & @LF
    $Output &= "Status: " & @TAB & @TAB & @TAB & .Status & @LF
    $Output &= "StatusInfo: " & @TAB & @TAB & @TAB & @TAB & .StatusInfo & @LF
    $Output &= "SystemCreationClassName: " & @TAB & .SystemCreationClassName & @LF
    $Output &= "SystemName: " & @TAB & @TAB & .SystemName
    EndWith
    MsgBox(0, "Info", $Output)
    $Output = ""
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $objInstances = 0
    $objWMIService = 0

    [/autoit]

    Leider jedoch auch ohne Erfolg. Der Monitorname oder auch die anderen Felder sind leer oder unbrauchbar, da zu allgemein (PnP-Standardmonitor)
    Irgendwie muss doch auch Windows mit den Bildschirmen kommunizieren. Oder erledigen das bloss die Treiber?

    Wie sieht es dann mit dem "Standard" Windows Monitor-Treiber aus? Könnte man den irgendwie ansteuern, bzw. anfragen?
    Ich bräuchte eigentlich bloss den Herstellernamen. (Am besten natürlich die rohen EDID Daten, aber mindestens den Monitornamen)

    Fällt noch jemandem etwas ein?

  • Zitat

    Fällt noch jemandem etwas ein?

    Ja nimm ein anderes OS oder schau dich in den XBMC Foren um, da xbmc multiplattform und
    evtl. hat einer unter win die selben Probleme wie unter Linux wenn Display aus und HTPC sich einschaltet ohne mit dem TV zu kommunizieren.

    Gruß Dietmar

    Das Thema edid.bin und alles was dazugehört wird zumindest im vdrportal/htpcforum seit vdpau häufiger behandelt als nötig :)

    Hintergrund ist halt das TV und HTPC/VDR mit einander kommunizieren wollen wenn der HTPC startet,
    wenn TV aus was gut sein kann wenn sich der VDR zur Aufnahme selbsteinschaltet man aber dann dazustösst und den TV einschaltet hat man kein BIld.

    Lösung: in der xorg.conf die edid.bin mit angeben, in der stehen die zuvor ermittelten daten. :)

    Und wie schon gesagt ist linux da etwas gesprächiger lspci -vv usw. und es gibt auch fertige Scripte die solche Dateien erstellen.

    Ansonsten am LinuxPC immer die Displays anschliessen und Standardout in eine Datei schreiben und die auf dem WinPC weiterverarbeiteten (samba) oder halt die generierten bin Files auswerten.

    Soweit ich weiß kommunizieren die bevor der Treiber geladen wird.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (4. Mai 2011 um 11:50)

  • Hallo Dietmar,

    leider kann / soll / darf ich das nicht.

    Erklärung was ich eigentlich machen muss.


    Für eine Bank in den USA müssen wir ca. 8'000 neue Monitore testen.
    Sie haben u.a. die Anforderung, dass die Monitore keine Pixelfehler haben und dass die DDC Daten korrekt gesendet werden.

    Der Grund liegt darin, dass sie Ihre PCs nicht am Arbeitsplatz haben, sondern in einem 4,5km entfernten gesicherten Gehäude.
    Von dort gehen mehrere 10GBit Glasfaserleitungen zu den Monitoren. Mit anderen Worten:
    Wir remotisieren diese Computer mit allen Signalen (DVI / USB / Audio / seriell / ...)

    Dazu ist jeweils ein Sender beim PC und ein Empfänger bei Monitor / Tastatur / Maus / Telefon / Kartenleser notwendig.
    Damit der PC den Monitor korrekt darstellt müssen die DDC Daten über unsere abgesetzte Strecke übertragen werden.

    Wir haben nun einen kleinen Roboter konstruiert, welcher automatisch ein Bildschirm nach dem anderen an einen Prüfcomputer anschliesst und
    mehrere Testbilder auf dem Monitor darstellt. Dann kommt ein zweiter Roboter, welcher mit mehreren hochauflösenden Kameras den ganzen Bildschirm abfahren und ihn auf Pixelfehler prüfen.

    Ich muss nun mit AutoIt den Roboter ansteuern und die DDC Daten lesen. Unter Windows. Das ist Vorgabe.
    Den Roboter anzusteuern ist ganz leicht, denn ich muss bloss über die serielle Schnittstelle ein Startkommando senden, dann wird der nächste Bildschirm angeschlossen.
    Dann noch ein serieller Befehl und der 2. Roboter sucht nach Pixelfehler. Im Anschluss bekomme ich ein serieller String zurück, welcher sagt, ob Pixelfehler gefunden wurden, oder nicht.
    Dann muss ich noch die DDC Daten lesen, damit wir sicher sind, dass die EEPROMS in den Monitoren vom Hersteller korrekt geflasht wurden,
    damit sie später auch ohne Probleme an unseren Remotestrecken funktionieren.


    Gruss Veronesi

  • Ich möchte das gerne wieder hervorholen!
    Um die EDID Daten zu lesen habe ich hier ein Script gefunden. Jedenfalls glaube ich, dass es die EDID Daten liesst, denn es ist in C geschrieben, was ich absolut nicht verstehe.

    Gibt es hier jemanden, der das in AutoIt umsetzen kann? *ZuProgandySchiel*
    Das wäre wirklich sehr nett!

    Vielen Dank an Alle, die sich hier beteiligen!
    Veronesi

  • Da könntest du wirklich was gefunden haben, aber ich gerade genug Projekte, an denen ich arbeiten sollte aber nichts mache ;)

  • Soweit ich weiss ich das sehr hardwarenah und mit autoit eher schwierig umzusetzen.
    Werden dabei nicht direkt bestimmte Speicherregister der GPU ausgelesen und interpretiert?
    Das Thema hat es auf jeden Fall in sich ...

    Die Top-Experten auf dem Gebiet (zumindest @Windows) sind imho die Jungs von EnTech: http://www.entechtaiwan.com/util/moninfo.shtm
    Das Tool macht was du willst, nur in wie weit es sich automatisieren lässt weiss ich nicht.
    Dort gibt es aber auch ein Forum mit direktem Kontakt zu den Entwicklern.

  • Ja, von den Jungs ist ja auch das Tool softMCCS, welches wir haben. Habe letzte Woche die neueste Version getestet. Bei einem Monitor hat es versagt, bei dem Anderen hatte es 3(!!!!!!!) Minuten, bis es die EDID Daten gelesen hatte. Zwar korrekt, aber lange.
    Zudem lässt es sich nicht wirklich automatisieren.

    Den Link, den ich vorher gepostet habe könnte wirklich eine Lösung sein. Soweit ich gesehen habe, sind alle Funktionen (auch I2C Schreiben / Lesen / Clock ...) im MSDN beschrieben.
    Nur bräuchte ich jemanden, der mir das von C in AutoIt übersetzt.
    Progandy hat zu viel Arbeit... Aber vielleicht findet sich jemand, der in C fitt ist und etwas Zeit hat?

  • Nein, hatte ich noch nicht gesehen. Ist sicher auch interessant.
    Aber am interessantesten für mich wäre es, wenn der obenstehende Link in AutoIt übersetzt werden könnte. Dann bräuchte man kein externes Tool....

    Es geht ja nicht um die Kosten. Es geht ums Handling. Und in unserem Fall wäre es eben besser, es wäre alles in AutoIt.
    Wenn sich niemand findet, der Zeit und Lust hat, das C Programm in AutoIt umzusetzen, werde ich wohl das nehmen müssen.
    Ob's funktioniert kann ich nicht sagen, da ich es noch nicht testen konnte.

    Edit: es scheint auch so, als müsse das Programm lokal installiert werden. Das ist leider nicht gewünscht!

  • Du kannst doch dort mal nachfragen, ob sie dir eine DLL zum Auslesen zur Verfügung stellen könnten. Das wprde zwar etwas kosten, dafür aber auch ziemlich gut funktionieren schätze ich.

  • Habe soeben im Forum gefragt :)

    Aber ich denke, ich kenne die Antwort von denen...
    Naja, fragen kostet nichts!

    Wenn trotzdem jemand das C Script übersetzen kann... Bin gerne Abnehmer davon ;))

    Veronesi

  • Hallo!
    Also ich habe mir mal interessehalber das C Script angesehen, und muß sagen das es von ReactOS und nicht von Windows kommt. Da sind so sachen wie '#include <reactos/helper.h>' mit drin und ich weiß net welche Funktionen in den Includes stecken, und ob diese auch unter Code::Blocks oder DevCpp verfügbar sind... Also mit in AutoIt umsetzten siehts, glaub ich, schlecht aus.

    P.S:
    Ich habe mir grad mal das Tool softMCCS angeschaut und konnte direkt den Monitornamen bei mir mit dem AutoIt Tool 'Au3Info' auslesen (Class: TNextInspector)... Win7x64 hab ich drauf, und gab keine Probleme mit dem Programm. Sollte eigentlich kein großes Ding sein das Programm zu Automatisieren, ausser ich hab was verpasst ;)

    Grüsse von Techmix!

  • Ja, es wird wohl schon gehen, es zu automatisieren.
    Aber die 8'000 Monitore, die damit geprüft werden sollen, werden mit diesem Tool falsch erkannt. (Stichproben bei 30 Monitoren)

    Zudem dauerte es zT sehr lange (mehrere Minuten) bis die Daten gelesen wurden.
    Manchmal geht's in wenigen Sekunden.....
    Manchmal läuft es auf unserem (frisch aufgesetzten) Win 7 x64 gar nicht.
    Dann muss man zwei oder dreimal neu booten, manchmal auch das softMCCS neu installieren - erst dann läuft es wieder!

    Alles in allem wollte ich eine AutoIt Lösung, damit alles integriert ist und keine "unbekannten" externe Programme genutzt werden müssen!

    Automatisieren ließe es sich vermutlich schon, aber die Zuverlässigkeit des gesamten Programmes hat die Chefs leider nicht überzeugt!

    Schade!!!

  • Siehste, die Cheff´s hab ich vepasst ;)
    Ja Ok, ich verstehe...

    *Idee*
    Man müsste jetzt wissen ob der C-Source eine DLL oder Exe ist, sich das Progrämmchen aus ReactOS raussuchen und mit AU3 in Win7 ansteuern, und gucken ob´s läuft; währe ein Versuch wert.

    Edit: das Progrämmchen heißt 'videoprt.sys' kann man .sys Dateien genau so ansteuern wie eine DLL?!?

    Edit2:
    der 'videoprt.sys' ist auch in Win7 vorhanden; und soweit ich weiß ist ReactOS ein nachprogrammiertes Windows XP, also kann es sein das der C-Source schon 'so-in-etwa' bereits vorhanden ist!

    Einmal editiert, zuletzt von Techmix (10. Mai 2011 um 21:07)