1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Bitboy

Beiträge von Bitboy

  • SplashTextOn - Fenster automatisch an Schriftgröße anpassen

    • Bitboy
    • 8. Januar 2010 um 10:44

    gibt es eine Möglichkeit, das sich das Splash-Fenster automatisch an die Schriftgröße anpasst?
    Also gerade so groß ist das der Text hineinpasst?

  • Buch über AutoIt?

    • Bitboy
    • 6. Januar 2010 um 20:43

    Etwas Offtopic aber ich hab mal gelesen, dass OpenOffice die wiki-foratierung beherscht. weiß einer wie zuverlässig das funktioniert? und wie man bestehende wikibooks-Seiten laden kann?
    Das würde mein formatierungsproblem schonmal teilweise lösen. Dazu hab ich duden korrektor installiert, das heißt die rechtschreibeprüfung wäre in einem mit durch.

    Edit:
    Achso, meine vorschläge finden sich dann jeweils in den diskussionsseiten

  • Buch über AutoIt?

    • Bitboy
    • 5. Januar 2010 um 22:01

    Hab leider nicht soviel Zeit (wie immer...) würde aber ab und zu korrektur lesen und vllt kleinere änderungen machen. (kenn mich allerdings gar nciht mit dem fomatierungssystem aus...)

    Bei den Schleifen fehlt noch for...each brauch man zwar selten, sollte aber wegen der wmi später schonmal angesprochen werden.

    unter professionelles würde ich noch codeoptimierungen setzen

    falls jemand einen wikipedia account hat: der artikel ist veraltet

  • GetMonitor-Funktion testen

    • Bitboy
    • 5. Januar 2010 um 20:50

    So wie ich das bis jetzt sehe gibt windows die kontrolle darüber auch an den grafiktreiber, bzw den Dienst davon ab.

    HKLM\CurrentControlSet\Services\$Dienstname

    und da hat jeder Hersteller seine eigenen "Ideen" umgesetzt.

    einzige Möglichkeit die ich noch seh ist, dass man sich über die wmi ein paar infos besorgt die man dann eindeutig mit selbst gesammelten verknüpfen kann.
    Für XP sieht das auf anhieb möglich aus, wie zuverlässig das bei verschiedenen Einstellungen (Monitor zwar angeschlossen, aber nicht benutzt) lässt sich aber nicht sagen.
    teilweise liefert ja auch wmi sinnlose werte.

  • GetMonitor-Funktion testen

    • Bitboy
    • 5. Januar 2010 um 18:34

    hab beim nachrechnen auch gemerkt, dass die Werte für die Bildschirmgröße zu ungenau sind. naja war nen Versuch wert.

    Das mit dem zusätzlichen Schlüssel für INTEL Grafikkarten ist auch nicht bei allen so, auf meinem laptop gehts jedenfalls nicht....
    Langsam glaub ich auch nicht mehr dran, dass das allein über die registry geht, dafür ist das System zu wirr aufgebaut, dabei hätte es so einfach sein können...

  • GetMonitor-Funktion testen

    • Bitboy
    • 5. Januar 2010 um 10:18

    So, anscheinend legt INTEL einen zusätzlichen Schlüssel an der in anderen Systemen nicht da ist.

    Hier also die neue Version. Weiß eigentlich jemand wie amn die Größe vom Monitor bestimmen kann? Man bräuchte irgendwie einen Vergleichswert der PixelperInch oder so ähnlich heißt, finde aber dazu nichts.

    Spoiler anzeigen
    [autoit]

    ;####################################################################
    ;#
    ;# Function _Get_Displays()
    ;#
    ;# Rückgabe: Array
    ;# Array[0][0] = Anzahl der Displays [n]
    ;# Array[n][0] = Monitornummer
    ;# Array[n][1] = Hersteller
    ;# Array[n][2] = Modell
    ;# Array[n][3] = HardwareID
    ;# Array[n][4] = Treiber-Anbieter
    ;# Array[n][5] = Treiberversion
    ;# Array[n][6] = Maximale Auflösung X
    ;# Array[n][7] = Maximale Auflösung Y
    ;# Array[n][8] = Aktuelle Auflösung X
    ;# Array[n][9] = Aktuelle Auflösung Y
    ;# Array[n][10] = Farbtiefe
    ;# Array[n][11] = Bildwiederholrate
    ;# Array[n][12] = Teil des Desktops (1=Ja/0=Nein)
    ;# Array[n][13] = Position X
    ;# Array[n][14] = Position Y
    ;# Array[n][15] = DPMS (1=Ja/0=Nein)
    ;#
    ;# Autor: Bitboy, autoit.de
    ;#
    ;####################################################################

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

    Func _Get_Displays()
    Local $MainKey, $ConfigKey, $MonKey, $i, $j, $tmpStr, $tmpStr2, $tmpArr
    Local $DeviceCount, $DCounter=0, $DeviceArr[64][11]
    Local $enum1, $enum2, $MonCounter=0, $MonArr[64][12]
    Local $retArr[64][16], $retCounter=0

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

    ;Hauptschlüssel entsprechd der Architektur
    If @OSArch <> "X86" Then
    $MainKey = "HKLM64"
    $ConfigKey = "HKCC64"
    Else
    $MainKey = "HKLM"
    $ConfigKey = "HKCC"
    EndIf

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

    $DeviceCount = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "MaxObjectNumber")

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

    For $i = 0 To $DeviceCount
    ;Alle VideoDevices ermiteln
    $tmpStr = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $tmpStr = StringReplace($tmpStr, "\Registry\Machine", $MainKey)
    $tmpStr2 = RegEnumVal($tmpStr & "\VolatileSettings", 1)
    If $tmpStr2 = "" Then
    ContinueLoop
    EndIf
    $DCounter = $DCounter + 1
    $tmpStr = RegRead($tmpStr & "\VolatileSettings", $tmpStr2)

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

    $tmpStr = _Internal_HexToStr($tmpStr)

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

    $tmpStr = StringReplace($tmpStr, "\??\", "")
    $tmpStr = StringReplace($tmpStr, "#", "\")
    $tmpStr = StringLeft($tmpStr, StringInStr($tmpStr, "\{", 0, -1)-1)

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

    $DeviceArr[$DCounter][0] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\" & $tmpStr, "ParentIdPrefix")
    $tmpStr2 = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\" & $tmpStr, "LocationInformation")
    $tmpStr2 = StringRegExpReplace($tmpStr2, "[^0-9,]", "")
    $tmpArr = StringSplit($tmpStr2, ",")

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

    ;PCI-BUS = 1; Gerät = 2; Funktion = 3
    For $j = 1 To $tmpArr[0]
    $DeviceArr[$DCounter][$j] = $tmpArr[$j]
    Next

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

    If $DeviceArr[$DCounter][3] <> 0 Then $DeviceArr[$DCounter][3] = $DeviceArr[$DCounter][3] + 1

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

    ;Dazugehörige Informationen ermitteln (Auflösung..)
    $tmpStr = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $tmpStr = StringReplace($tmpStr, "\Registry\Machine", $ConfigKey)
    $tmpStr = StringRegExpReplace($tmpStr, "(\ControlSet)[0-9]{3}", "\CurrentControlSet")
    $DeviceArr[$DCounter][4] = RegRead($tmpStr, "DefaultSettings.XResolution") ;X-Auflösung
    $DeviceArr[$DCounter][5] = RegRead($tmpStr, "DefaultSettings.YResolution") ;Y-Auflösung
    $DeviceArr[$DCounter][6] = RegRead($tmpStr, "DefaultSettings.BitsPerPel") ;Farbtiefe
    $DeviceArr[$DCounter][7] = RegRead($tmpStr, "DefaultSettings.VRefresh") ;Bildwiederholrate
    $DeviceArr[$DCounter][8] = RegRead($tmpStr, "Attach.ToDesktop") ;Teil des Desktops ?
    $DeviceArr[$DCounter][9] = RegRead($tmpStr, "Attach.RelativeX") ;X-Position
    $DeviceArr[$DCounter][10] = RegRead($tmpStr, "Attach.RelativeY") ;Y-Position

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

    ;_ArrayDisplay($DeviceArr)
    Next

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

    $DeviceArr[0][0] = $DCounter
    ReDim $DeviceArr[$DCounter+1][14]

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

    ;Prüfung der real angeschlossenen Monitore (erfoderlich für einige Grafikkarten z.B INTEL)
    RegRead($ConfigKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY", "")
    If @error <> 1 Then
    $MonKey = $ConfigKey
    Else
    $MonKey = $MainKey
    EndIf

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

    ;Monitore ermitteln
    $i = 1
    While 1
    $enum1 = RegEnumKey($MonKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY", $i)
    If @error Then ExitLoop

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

    $j = 1
    While 1
    $enum2 = RegEnumKey($MonKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1, $j)
    If @error Then ExitLoop

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

    RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2 & "\Control", "")
    ;MsgBox(0, "debug", @extended)
    If @error <> 1 Then
    $MonCounter = $MonCounter + 1
    $MonArr[$MonCounter][0] = StringLeft($enum2, 12) ;Parent ID Prefix
    $MonArr[$MonCounter][1] = Int(StringMid($enum2, 23, 2)) ;PCI-Bus Nummer
    $MonArr[$MonCounter][2] = StringRight($enum2, 2) ; Funktion und oder Gerätenummer ?
    $MonArr[$MonCounter][3] = StringMid($enum2, 14, 8) ; "SettingsID"
    $MonArr[$MonCounter][4] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "Mfg")
    $MonArr[$MonCounter][5] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "DeviceDesc")
    $MonArr[$MonCounter][6] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "HardwareID")
    $tmpStr = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "Driver")
    $MonArr[$MonCounter][7] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "ProviderName")
    $MonArr[$MonCounter][8] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "DriverVersion")
    $tmpStr2 = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "MaxResolution")

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

    $MonArr[$MonCounter][9] = StringLeft($tmpStr2, StringInStr($tmpStr2, ",")-1)
    $MonArr[$MonCounter][10] = StringRight($tmpStr2, StringLen($tmpStr2) - StringInStr($tmpStr2, ","))
    $MonArr[$MonCounter][11] = Int(RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "DPMS"))
    If $MonArr[$MonCounter][11] = "" Then $MonArr[$MonCounter][11] = 0
    EndIf

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

    $j = $j + 1
    WEnd

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

    $i = $i + 1
    WEnd

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

    ;Arrays zusammenführen
    For $i = 1 To $DeviceArr[0][0]
    ;ParentID prüfen
    $tmpStr = $DeviceArr[$i][0]

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

    For $j = 1 To $MonCounter
    If $MonArr[$j][0] = $tmpStr Then
    ;ParentID stimmt -> Bus-Nummer prüfen
    If $DeviceArr[$i][1] = $MonArr[$j][1] Then
    ;Bus-Nummer Stimmt -> Gerätenummer / Funktion prüfen
    If String($DeviceArr[$i][3] & $DeviceArr[$i][2]) = $MonArr[$j][2] Then
    ;Geräte stimmen überein
    $retCounter = $retCounter + 1
    $retArr[$retCounter][0] = $j
    $retArr[$retCounter][1] = $MonArr[$j][4]
    $retArr[$retCounter][2] = $MonArr[$j][5]
    $retArr[$retCounter][3] = $MonArr[$j][6]
    $retArr[$retCounter][4] = $MonArr[$j][7]
    $retArr[$retCounter][5] = $MonArr[$j][8]
    $retArr[$retCounter][6] = $MonArr[$j][9]
    $retArr[$retCounter][7] = $MonArr[$j][10]
    $retArr[$retCounter][8] = $DeviceArr[$i][4]
    $retArr[$retCounter][9] = $DeviceArr[$i][5]
    $retArr[$retCounter][10] = $DeviceArr[$i][6]
    $retArr[$retCounter][11] = $DeviceArr[$i][7]
    $retArr[$retCounter][12] = $DeviceArr[$i][8]
    $retArr[$retCounter][13] = $DeviceArr[$i][9]
    $retArr[$retCounter][14] = $DeviceArr[$i][10]
    $retArr[$retCounter][15] = $MonArr[$MonCounter][11]
    EndIf
    EndIf
    EndIf
    Next
    Next

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

    $retArr[0][0] = $retCounter
    Redim $retArr[$retCounter+1][16]
    ;MsgBox(0, "debug", $tmpStr)
    ;_ArrayDisplay($MonArr)
    ;_ArrayDisplay($DeviceArr)
    Return $retArr
    EndFunc

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

    Func _Internal_HexToStr($HexString)
    Local $i, $Len, $retStr, $tmpStr

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

    $HexString = StringRight($HexString, StringLen($HexString) - 2)
    $Len = StringLen($HexString)
    For $i = 1 To $Len Step 2
    $tmpStr = StringMid ($HexString, $i, 2)
    If $tmpStr <> "00" Then
    $retStr = $retStr & Chr(Dec($tmpStr))
    EndIf
    Next
    Return $retStr
    EndFunc

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

    ;TestCode
    #include <array.au3>
    $test = _Get_Displays()
    $test[0][1] = "Hersteller"
    $test[0][2] = "Modell"
    $test[0][3] = "HardwareID"
    $test[0][4] = "Treiber Anbieter"
    $test[0][5] = "Treiberversion"
    $test[0][6] = "Max. X"
    $test[0][7] = "Max Y"
    $test[0][8] = "Aktuell X"
    $test[0][9] = "Aktuell Y"
    $test[0][10] = "Farbtiefe"
    $test[0][11] = "Bildwiederholrate"
    $test[0][12] = "Teil des Desktops"
    $test[0][13] = "Position X"
    $test[0][14] = "Position Y"
    $test[0][15] = "DPMS"
    _ArrayDisplay($test)

    [/autoit]
  • GetMonitor-Funktion testen

    • Bitboy
    • 4. Januar 2010 um 20:58

    Das von mir oben angesprochene Problem mit den vielen Monitoren scheint besonders bei On-Board Intel Grafikkarten aufzutreten.
    Hab es eben an meinem Tablet versucht und Tada 7(!) Monitore im Gerätemanager bei maximal 3 möglichen. Und das Script liefert natürlich genauso viele zurück.

    Gut möglich das die Intel-Treiber etwas kurios programmiert sind. Leider hab ich nicht wirklich ne Idee wie man das Problem in den Griff bekommen kann, ansonsten funktioniert das Script und zeigt alle Werte richtig an.


    Edit: It's not a bug, it's a feature!
    http://www.intel.com/support/graphi…b/CS-022204.htm

    leuchtet mir trotzdem nicht ein warum das so gemacht wurde. und mein Problem löst es auch nicht...

  • GetMonitor-Funktion testen

    • Bitboy
    • 4. Januar 2010 um 16:20

    Wie gesagt, meine Funktion ist nur für XP, wie Oscar schon bemerkte haben sich die Regkeys mit VISTA geändert.

    Mir geht es auch erstmal nur um XP, wenn das sauber läuft kann man Oscars und meine Funktion zu einer zusammenbasteln.

  • GetMonitor-Funktion testen

    • Bitboy
    • 4. Januar 2010 um 16:00

    So hab hier mal eine neue Version für XP. Bitte mal testen.

    Mit folgendem könnte es Probleme geben: Zeile 63 Da in der Registry die deutschen bezweichnungen gespeichert sind (Gerät, Funktion) wird der Aufruf bei anderssprachigen Betriebssystemen nicht funktionieren. Daneben bin ich mir nciht sicher ob meine Zuordnung der Geräte wirklich korrekt ist, hab leider zu wenig Hardware für ausführliche Tests.

    ToDo: Rückgabe von Fehlern.

    Edit: kleinen Fehler korrigiert

    Einen Fehler hab ich noch gefunden: Wenn Windows mehr Monitore erkennt als tatsächlich angeschlossen sind, wirkt sich das auch auf das Script aus :(

    Spoiler anzeigen
    [autoit]

    ;####################################################################
    ;#
    ;# Function _Get_Displays()
    ;#
    ;# Rückgabe: Array
    ;# Array[0][0] = Anzahl der Displays [n]
    ;# Array[n][0] = Hersteller
    ;# Array[n][1] = Modell
    ;# Array[n][2] = HardwareID
    ;# Array[n][3] = Treiber-Anbieter
    ;# Array[n][4] = Treiberversion
    ;# Array[n][5] = Maximale Auflösung X
    ;# Array[n][6] = Maximale Auflösung Y
    ;# Array[n][7] = Aktuelle Auflösung X
    ;# Array[n][8] = Aktuelle Auflösung Y
    ;# Array[n][9] = Farbtiefe
    ;# Array[n][10] = Bildwiederholrate
    ;# Array[n][11] = Teil des Desktops (1=Ja)
    ;# Array[n][12] = Position X
    ;# Array[n][13] = Position Y
    ;#
    ;# Autor: Bitboy, autoit.de
    ;#
    ;####################################################################

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

    Func _Get_Displays()
    Local $MainKey, $ConfigKey, $i, $j, $tmpStr, $tmpStr2, $tmpArr
    Local $DeviceCount, $DCounter=0, $DeviceArr[64][11]
    Local $enum1, $enum2, $MonCounter=0, $MonArr[64][10]
    Local $retArr[64][14], $retCounter=0

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

    ;Hauptschlüssel entsprechd der Architektur
    If @OSArch <> "X86" Then
    $MainKey = "HKLM64"
    $ConfigKey = "HKCC64"
    Else
    $MainKey = "HKLM"
    $ConfigKey = "HKCC"
    EndIf

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

    $DeviceCount = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "MaxObjectNumber")

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

    For $i = 0 To $DeviceCount
    ;Alle VideoDevices ermiteln
    $tmpStr = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $tmpStr = StringReplace($tmpStr, "\Registry\Machine", $MainKey)
    $tmpStr2 = RegEnumVal($tmpStr & "\VolatileSettings", 1)
    If $tmpStr2 = "" Then
    ContinueLoop
    EndIf
    $DCounter = $DCounter + 1
    $tmpStr = RegRead($tmpStr & "\VolatileSettings", $tmpStr2)

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

    $tmpStr = _Internal_HexToStr($tmpStr)

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

    $tmpStr = StringReplace($tmpStr, "\??\", "")
    $tmpStr = StringReplace($tmpStr, "#", "\")
    $tmpStr = StringLeft($tmpStr, StringInStr($tmpStr, "\{", 0, -1)-1)

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

    $DeviceArr[$DCounter][0] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\" & $tmpStr, "ParentIdPrefix")
    $tmpStr2 = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\" & $tmpStr, "LocationInformation")
    $tmpStr2 = StringRegExpReplace($tmpStr2, "[^0-9,]", "")
    $tmpArr = StringSplit($tmpStr2, ",")

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

    ;PCI-BUS = 1; Gerät = 2; Funktion = 3
    For $j = 1 To $tmpArr[0]
    $DeviceArr[$DCounter][$j] = $tmpArr[$j]
    Next

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

    If $DeviceArr[$DCounter][3] <> 0 Then $DeviceArr[$DCounter][3] = $DeviceArr[$DCounter][3] + 1

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

    ;Dazugehörige Informationen ermitteln (Auflösung..)
    $tmpStr = RegRead($MainKey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $tmpStr = StringReplace($tmpStr, "\Registry\Machine", $ConfigKey)
    $tmpStr = StringRegExpReplace($tmpStr, "(\ControlSet)[0-9]{3}", "\CurrentControlSet")
    MsgBox(0, "debug", $tmpStr)
    $DeviceArr[$DCounter][4] = RegRead($tmpStr, "DefaultSettings.XResolution") ;X-Auflösung
    $DeviceArr[$DCounter][5] = RegRead($tmpStr, "DefaultSettings.YResolution") ;Y-Auflösung
    $DeviceArr[$DCounter][6] = RegRead($tmpStr, "DefaultSettings.BitsPerPel") ;Farbtiefe
    $DeviceArr[$DCounter][7] = RegRead($tmpStr, "DefaultSettings.VRefresh") ;Bildwiederholrate
    $DeviceArr[$DCounter][8] = RegRead($tmpStr, "Attach.ToDesktop") ;Teil des Desktops ?
    $DeviceArr[$DCounter][9] = RegRead($tmpStr, "Attach.RelativeX") ;X-Position
    $DeviceArr[$DCounter][10] = RegRead($tmpStr, "Attach.RelativeY") ;Y-Position

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

    ;_ArrayDisplay($DeviceArr)
    Next

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

    $DeviceArr[0][0] = $DCounter
    ReDim $DeviceArr[$DCounter+1][14]

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

    ;Monitore ermitteln
    $i = 1
    While 1
    $enum1 = RegEnumKey($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY", $i)
    If @error Then ExitLoop

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

    $j = 1
    While 1
    $enum2 = RegEnumKey($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1, $j)
    If @error Then ExitLoop

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

    RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2 & "\Control", "")
    If @error <> 1 Then
    $MonCounter = $MonCounter + 1
    $MonArr[$MonCounter][0] = StringLeft($enum2, 12) ;Parent ID Prefix
    $MonArr[$MonCounter][1] = Int(StringMid($enum2, 23, 2)) ;PCI-Bus Nummer
    $MonArr[$MonCounter][2] = StringRight($enum2, 2) ; Funktion und oder Gerätenummer ?
    $MonArr[$MonCounter][3] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "Mfg")
    $MonArr[$MonCounter][4] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "DeviceDesc")
    $MonArr[$MonCounter][5] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "HardwareID")
    $tmpStr = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enum1 & "\" & $enum2, "Driver")
    $MonArr[$MonCounter][6] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "ProviderName")
    $MonArr[$MonCounter][7] = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "DriverVersion")
    $tmpStr2 = RegRead($MainKey & "\SYSTEM\CurrentControlSet\Control\Class\" & $tmpStr, "MaxResolution")

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

    $MonArr[$MonCounter][8] = StringLeft($tmpStr2, StringInStr($tmpStr2, ",")-1)
    $MonArr[$MonCounter][9] = StringRight($tmpStr2, StringLen($tmpStr2) - StringInStr($tmpStr2, ","))
    EndIf

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

    $j = $j + 1
    WEnd

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

    $i = $i + 1
    WEnd

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

    ;Arrays zusammenführen
    For $i = 1 To $DeviceArr[0][0]
    ;ParentID prüfen
    $tmpStr = $DeviceArr[$i][0]

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

    For $j = 1 To $MonCounter
    If $MonArr[$j][0] = $tmpStr Then
    ;ParentID stimmt -> Bus-Nummer prüfen
    If $DeviceArr[$i][1] = $MonArr[$j][1] Then
    ;Bus-Nummer Stimmt -> Gerätenummer / Funktion prüfen
    If String($DeviceArr[$i][3] & $DeviceArr[$i][2]) = $MonArr[$j][2] Then
    ;Geräte stimmen überein
    $retCounter = $retCounter + 1
    $retArr[$retCounter][0] = $MonArr[$j][3]
    $retArr[$retCounter][1] = $MonArr[$j][4]
    $retArr[$retCounter][2] = $MonArr[$j][5]
    $retArr[$retCounter][3] = $MonArr[$j][6]
    $retArr[$retCounter][4] = $MonArr[$j][7]
    $retArr[$retCounter][5] = $MonArr[$j][8]
    $retArr[$retCounter][6] = $MonArr[$j][9]
    $retArr[$retCounter][7] = $DeviceArr[$i][4]
    $retArr[$retCounter][8] = $DeviceArr[$i][5]
    $retArr[$retCounter][9] = $DeviceArr[$i][6]
    $retArr[$retCounter][10] = $DeviceArr[$i][7]
    $retArr[$retCounter][11] = $DeviceArr[$i][8]
    $retArr[$retCounter][12] = $DeviceArr[$i][9]
    $retArr[$retCounter][13] = $DeviceArr[$i][10]
    EndIf
    EndIf
    EndIf
    Next
    Next

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

    $retArr[0][0] = $retCounter
    Redim $retArr[$retCounter+1][14]
    ;MsgBox(0, "debug", $tmpStr)
    ;_ArrayDisplay($MonArr)
    ;_ArrayDisplay($DeviceArr)
    Return $retArr
    EndFunc

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

    Func _Internal_HexToStr($HexString)
    Local $i, $Len, $retStr, $tmpStr

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

    $HexString = StringRight($HexString, StringLen($HexString) - 2)
    $Len = StringLen($HexString)
    For $i = 1 To $Len Step 2
    $tmpStr = StringMid ($HexString, $i, 2)
    If $tmpStr <> "00" Then
    $retStr = $retStr & Chr(Dec($tmpStr))
    EndIf
    Next
    Return $retStr
    EndFunc

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

    #include <array.au3>
    $test = _Get_Displays()
    _ArrayDisplay($test)

    [/autoit]
  • Frohe Weihnacht!!!

    • Bitboy
    • 24. Dezember 2009 um 23:05

    Da schließe ich mich gerne an: Frohe Weihnachten wünsche ich euch allen.

  • GetMonitor-Funktion testen

    • Bitboy
    • 24. Dezember 2009 um 22:13

    Gern geschehen. Arbeite ja selber daran, deswegen würde ich mich auch sehr freuen wenn du es für XP umgesetzt bekommst und den Code hier veröffentlichst.

    Das Problem wo ich nicht weitergekommen bin steht ja im vorherigen Beitrag.

    Wünsche noch schöne Feiertage.

  • GetMonitor-Funktion testen

    • Bitboy
    • 23. Dezember 2009 um 20:09

    Also, ich bin bis jetzt soweit:

    Angefangen wird im Schlüssel
    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO
    Da werden alle Devices ausgelesen. Die Devicenummer gibt dabei auch die Monitornummer an. In dem String steht der Schlüssel wo es weiter geht. In meinem Beispiel \REGISTRY\Machine\System\ControlSet002\Services\ialm\Device0. Dieser Schlüssel hat einen Unterschlüssel mit dem Namen "VolatileSettings". In diesem ist wiederum ein Reg_Binary, dass den Pfad zu einem PCI Device angibt (PCI_VEN....).
    Den sucht man jetzt unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI heraus. Da gibt es einen Unterschlüssel und darin den String "ParentIDPrefix". ParentIDPrefix gibt den ersten Teil des "Monitornamens" an der unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY zu finden ist. (aktiv sind alle Monitore die den Unterschlüssel "Control" besitzen, Hier finden sich auch Hersteller und Modell). Um den 2. Teil des "Monitornamens zu finden, folgt man dem oben fett geschriebenen Schlüssel nur, dass man als Hauptschlüssel "HKEY_Current_Config" nimmt. In meinem Beispiel: HKEY_CURRENT_CONFIG\System\CurrentControlSet\Services\iAlm\Device0. (In diesem Schlüssel steht die aktuelle Auflösung, Position usw). Dieser Schlüssel hat einen oder mehr Unterschlüssel die mit "Mon" beginnen, gefolgt von einer Zahl. Der "unterste" Schlüssel SCHEINT ebenfalls die aktuelle Auflösung usw zu beinhalten. Die Zahl des Schlüssels ist der 2. Teil des Monitornamens unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY... Der Name besteht noch aus vier weiteren Ziffern getrennt von einem &, also &zz&zz. Wo dieser letzte Teil herkommt weiß ich allerdings nicht. Wäre aber ganz wichtig zu wissen weil sich der Monitorname teilweise nur durch diese letzten 2 Zahlengruppen unterscheidet.

    In WinXP SP3 scheint es ebenfalls unter dem Schlüssel
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video eine verbindung zwischen den Geräten zu geben (Mein letztes Script geht diesen Weg) dort tauchen PCI-Device und die ID des Monitortreibers auf. Allerdings steht in dem Schlüssel hinter der TreiberID auch noch eine mit Komma abgetrennte Zahl, wie man nun wieder auf die Zahl kommt weiß ich nicht...

    Ich hoffe, das war einigermaßen verständlich, einfach mal in der Registry nachverfolgen.
    Wenn man jetzt noch wüsste wie sich die letzten 2 Zahlen des "Monitornamens" zusammensetzen könnte man den Algo programmieren und es muss einen Weg geben. Im Gerätemanager kann man schließlich bei den Eigenschaften der Grafikkarte "Bussverhältnisse" anzeigen lassen (= Pfad in der Registry zum angeschlossenen Monitor)

  • GetMonitor-Funktion testen

    • Bitboy
    • 22. Dezember 2009 um 20:00

    Zitat: "Oh verdammt, unter WinXP funktioniert die WMI-Methode auch nicht bei mehreren Monitoren?"

    Vista und Win7 hab ich gar nicht, also versuche ich die Funktion für XP ans laufen zu bekommen. Ideal wäre natürlich wenns für alle Versionen läuft.

    Soweit bin ich jetzt: Sind aber immer noch Fehler drin und Sachen wo ich nciht ganz genau weiß wie es funktioniert :(

    Spoiler anzeigen
    [autoit]

    ;####################################################################
    ;#
    ;# Func _GetDisplays() ermittelt benutzte Monitore
    ;#
    ;# Rückgabewerte: Array[0][0] = Anzahl der Monitore = n
    ;# Array[n][0] = Hersteller
    ;# Array[n][1] = Modell
    ;# Array[n][2] = Aktuelle Auflösung X (Breite)
    ;# Array[n][3] = Aktuelle Auflösung Y (Höhe)
    ;# Array[n][4] = Aktuelle Bildwiederholrate (Hz)
    ;# Array[n][5] = Farbqualität (Bit)
    ;# Array[n][6] = Monitornummer
    ;# Array[n][7] = Maximale Auflösung X (Breite)
    ;# Array[n][8] = Maximale Auflösung Y (Höhe)
    ;# Array[n][9] = Treiberversion
    ;# Array[n][10] = Treiberdatum, Format: MM-DD-YYYY
    ;# Array[n][11] = *.inf-Datei des Treibers
    ;# Array[n][12] = *.inf-Section Treibers
    ;#
    ;# Autor: Bitboy
    ;####################################################################
    Dim $Monkey, $Driver

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

    Func _GetDisplays()
    Local $VidDevArr[1][2], $tmpKey, $tmpKey2, $DeviceID, $DeviceNum
    Local $counter=0, $enumkey1, $enumkey2, $retArray[64][13], $resArr, $temp, $MonitorID, $MonDriver, $CurRes, $CurResArr
    Local $Mainkey, $i, $j, $k, $tmpArr

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

    ;32 / 64 Bit Registryschlüssel festlegen
    If @OSArch = "X86" Then
    $Mainkey = "HKEY_LOCAL_MACHINE"
    Else
    $Mainkey = "HKEY_LOCAL_MACHINE64"
    EndIf

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

    ;Anzahl und DeviceID der VideoDevices bestimmen
    $DeviceNum = Dec(RegRead($Mainkey & "\HARDWARE\DEVICEMAP\VIDEO", "MaxObjectNumber"))
    Redim $VidDevArr[$DeviceNum+2][2]
    For $i = 0 To $DeviceNum
    ConsoleWrite($i)
    $tmpKey = RegRead($Mainkey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $VidDevArr[$i+1][1] = StringRight($tmpKey, StringLen($tmpKey) - StringInStr($tmpKey, "\{", 0, -1))
    $tmpKey = StringReplace($tmpKey, "\Registry\Machine", $Mainkey)
    $tmpKey2 = RegEnumVal($tmpKey & "\VolatileSettings", 1)
    $tmpKey = RegRead($tmpKey & "\VolatileSettings", $tmpKey2)
    If $tmpKey <> "" Then
    $counter = $counter +1
    $tmpKey = StringReplace($tmpKey, "0x", "")
    $tmpKey = StringReplace($tmpKey, "00", "")
    ;MsgBox(0,"debug", $tmpKey)
    $tmpArr = StringSplit(_HexToString($tmpKey), "#")
    ;_ArrayDisplay($tmpArr)
    For $j = 1 To $tmpArr[0]
    If StringInStr($tmpArr[$j], "PCI") Then
    $DeviceID = "PCI:"
    ElseIf StringInStr($tmpArr[$j], "VEN") Then
    $DeviceID = $DeviceID & $tmpArr[$j]
    ExitLoop
    EndIf
    Next
    $VidDevArr[$i+1][0] = $DeviceID
    EndIf
    Next

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

    ReDim $VidDevArr[$counter + 1][2]
    $VidDevArr[0][0] = $counter
    _ArrayDisplay($VidDevArr)
    $i = 1
    $j = 1
    $counter = 0

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

    While 1
    $enumkey1 = RegEnumKey($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY", $i)
    If @error <> 0 then ExitLoop

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

    $j = 1
    While 1
    $enumkey2 = RegEnumKey($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1, $j)
    If @error <> 0 then ExitLoop
    RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2 & "\Control", "")
    If @error <> 1 Then
    $MonitorID = StringReplace(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "HardwareID"), "\", ":")
    $MonDriver = StringReplace(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Driver"), "\", ":")
    $counter = $counter + 1
    ;Hersteller
    $retArray[$counter][0] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Mfg")
    ;Modell
    $retArray[$counter][1] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "DeviceDesc")

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

    For $k = $VidDevArr[0][0] to 0 step -1
    $CurRes = RegEnumKey($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & $VidDevArr[$k][0] & "\" & $MonitorID & ":" & $MonDriver & ",0", 1)
    If Not @error Then
    $CurResArr = StringSplit($CurRes,"x")
    ;aktuelle Auflösung X (Breite)
    $retArray[$counter][2] = StringStripWS($CurResArr[1], 8)
    ;Aktuelle Auflösung Y (Höhe)
    $retArray[$counter][3] = StringStripWS($CurResArr[2], 8)
    ;Aktuelle Bildwiederholrate (Hz)
    $retArray[$counter][4] = StringStripWS(StringReplace($CurResArr[3],"Hz",""), 8)
    ;MsgBox(0, $MonitorID & ":" & $MonDriver & ",0", $CurRes)

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

    ;Farbtiefe
    If RegRead($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & _
    $VidDevArr[$k][0] & "\" & $MonitorID & ":" & $MonDriver & ",0\" & $CurRes, "32 bpp") = 1 Then
    $retArray[$counter][5] = 32
    ElseIf RegRead($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & _
    $VidDevArr[$k][0] & "\" & $MonitorID & ":" & $MonDriver & ",0\" & $CurRes, "16 bpp") = 1 Then
    $retArray[$counter][5] = 16
    ElseIf RegRead($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & _
    $VidDevArr[$k][0] & "\" & $MonitorID & ":" & $MonDriver & ",0\" & $CurRes, "8 bpp") = 1 Then
    $retArray[$counter][5] = 8
    ElseIf RegRead($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & _
    $VidDevArr[$k][0] & "\" & $MonitorID & ":" & $MonDriver & ",0\" & $CurRes, "4 bpp") = 1 Then
    $retArray[$counter][5] = 4
    EndIf
    $retArray[$counter][6] = $k
    Else
    ;$retArray[$counter][2] = 0
    ;$retArray[$counter][3] = 0
    ;$retArray[$counter][4] = 0
    ;$retArray[$counter][5] = 0
    ;$retArray[$counter][6] = 0
    EndIf
    Next

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

    ;Maximale Auflösung
    $temp = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Driver")
    $resArr = StringSplit(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "MaxResolution"), ",")
    ;X (Breite)
    $retArray[$counter][7] = $resArr[1]
    ;Y (Höhe)
    $retArray[$counter][8] = $resArr[2]
    ;Treiberversion
    $retArray[$counter][9] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverVersion")
    ;Treiberdatum
    $retArray[$counter][10] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverDate")
    ;*.Inf-Datei
    $retArray[$counter][11] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfPath")
    ;Inf-Section
    $retArray[$counter][12] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfSection")
    EndIf
    $j = $j + 1
    WEnd

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

    $i = $i + 1
    WEnd
    ReDim $retArray[$counter+1][13]
    $retArray[0][0] = $counter
    Return $retArray
    EndFunc

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

    #Include <String.au3>
    #include <array.au3>

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

    $test = _GetDisplays()
    _ArrayDisplay($test)

    [/autoit]
  • GetMonitor-Funktion testen

    • Bitboy
    • 22. Dezember 2009 um 19:05

    water
    Werden im Gerätemanager bei dir auch soviele Monitore gelistet?

    Was ich auch nicht versteh ist, dass das Script gar keine eingestellte Auflösung anzeigt.
    ist unter dem Schlüssel HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\
    gar ncihts dass mit der Auflösung zu tun hat?

  • GetMonitor-Funktion testen

    • Bitboy
    • 22. Dezember 2009 um 11:45

    An dem Rechner wo ichs getestet hab (XP SP3) waren auch mal andere Monitore angeschlossen.
    So wie ich das gesehen hab, haben aber nur aktive Monitore den Schlüssel
    HKLM\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2 & "\Control" (Zeile 93)

    ist das möglicherweise unter SP2 anders?

    Hab mir mit dem Process Monitor anzeigen lassen auf welche Schlüssel das Programm zur Anzeigeeinstellung zugreift und andere als die benutzten Schlüssel hab ich nicht gesehen.

  • GetMonitor-Funktion testen

    • Bitboy
    • 22. Dezember 2009 um 00:55

    Hab meins nochmal erweitert, kann das mal jemand mit mehreren Monitoren testen um zu sehen ob das der richtige Weg ist?

    Spoiler anzeigen
    [autoit]

    ;####################################################################
    ;#
    ;# Func _GetDisplays() ermittelt benutzte Monitore
    ;#
    ;# Rückgabewerte: Array[0][0] = Anzahl der Monitore = n
    ;# Array[n][0] = Hersteller
    ;# Array[n][1] = Modell
    ;# Array[n][2] = Aktuelle Auflösung X (Breite)
    ;# Array[n][3] = Aktuelle Auflösung Y (Höhe)
    ;# Array[n][4] = Aktuelle Bildwiederholrate (Hz)
    ;# !Array[n][5] = Farbqualität (Bit) (fehlt noch)
    ;# Array[n][6] = Monitornummer
    ;# Array[n][7] = Maximale Auflösung X (Breite)
    ;# Array[n][8] = Maximale Auflösung Y (Höhe)
    ;# Array[n][9] = Treiberversion
    ;# Array[n][10] = Treiberdatum, Format: MM-DD-YYYY
    ;# Array[n][11] = *.inf-Datei des Treibers
    ;# Array[n][12] = *.inf-Section Treibers
    ;# ToDO: Fehlerkorrektur
    ;# Autor: Bitboy
    ;####################################################################
    Dim $Monkey, $Driver

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

    Func _GetDisplays()
    Local $VidDevArr[1], $tmpKey, $tmpKey2, $DeviceID, $DeviceNum
    Local $counter=0, $enumkey1, $enumkey2, $retArray[64][13], $resArr, $temp, $MonitorID, $MonDriver, $CurRes, $CurResArr
    Local $Mainkey, $i, $j, $k, $tmpArr

    ;32 / 64 Bit Registryschlüssel festlegen
    If @OSArch = "X86" Then
    $Mainkey = "HKEY_LOCAL_MACHINE"
    Else
    $Mainkey = "HKEY_LOCAL_MACHINE64"
    EndIf

    ;Anzahl und DeviceID der VideoDevices bestimmen
    $DeviceNum = Dec(RegRead($Mainkey & "\HARDWARE\DEVICEMAP\VIDEO", "MaxObjectNumber"))
    Redim $VidDevArr[$DeviceNum+1]
    For $i = 0 To $DeviceNum
    ConsoleWrite($i)
    $tmpKey = RegRead($Mainkey & "\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video" & $i)
    $tmpKey = StringReplace($tmpKey, "\Registry\Machine", $Mainkey)
    $tmpKey2 = RegEnumVal($tmpKey & "\VolatileSettings", 1)
    $tmpKey = RegRead($tmpKey & "\VolatileSettings", $tmpKey2)
    If $tmpKey <> "" Then
    $counter = $counter +1
    $tmpKey = StringReplace($tmpKey, "0x", "")
    $tmpKey = StringReplace($tmpKey, "00", "")
    ;MsgBox(0,"debug", $tmpKey)
    $tmpArr = StringSplit(_HexToString($tmpKey), "#")
    ;_ArrayDisplay($tmpArr)
    For $j = 1 To $tmpArr[0]
    If StringInStr($tmpArr[$j], "PCI") Then
    $DeviceID = "PCI:"
    EndIf
    If StringInStr($tmpArr[$j], "VEN") Then
    $DeviceID = $DeviceID & $tmpArr[$j]
    ExitLoop
    EndIf
    Next
    $VidDevArr[$i+1] = $DeviceID
    EndIf
    Next

    ReDim $VidDevArr[$counter + 1]
    $VidDevArr[0] = $counter
    ;_ArrayDisplay($VidDevArr)
    $i = 1
    $j = 1
    $counter = 0

    While 1
    $enumkey1 = RegEnumKey($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY", $i)
    If @error <> 0 then ExitLoop

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

    $j = 1
    While 1
    $enumkey2 = RegEnumKey($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1, $j)
    If @error <> 0 then ExitLoop
    RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2 & "\Control", "")
    If @error <> 1 Then
    $MonitorID = StringReplace(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "HardwareID"), "\", ":")
    $MonDriver = StringReplace(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Driver"), "\", ":")
    $counter = $counter + 1
    ;Hersteller
    $retArray[$counter][0] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Mfg")
    ;Modell
    $retArray[$counter][1] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "DeviceDesc")

    For $k = 1 To $VidDevArr[0]
    $CurRes = RegEnumKey($Mainkey & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Video\" & $VidDevArr[$k] & "\" & $MonitorID & ":" & $MonDriver & ",0", 1)
    If Not @error Then
    $CurResArr = StringSplit($CurRes,"x")
    ;aktuelle Auflösung X (Breite)
    $retArray[$counter][2] = StringStripWS($CurResArr[1], 8)
    ;Aktuelle Auflösung Y (Höhe)
    $retArray[$counter][3] = StringStripWS($CurResArr[2], 8)
    ;Aktuelle Bildwiederholrate (Hz)
    $retArray[$counter][4] = StringStripWS(StringReplace($CurResArr[3],"Hz",""), 8)
    ;MsgBox(0, $MonitorID & ":" & $MonDriver & ",0", $CurRes)

    ;ToDo: Schleife zum ermitteln der Farbtiefe

    $retArray[$counter][6] = $k
    EndIf
    Next

    ;Maximale Auflösung
    $temp = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Driver")
    $resArr = StringSplit(RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "MaxResolution"), ",")
    ;X (Breite)
    $retArray[$counter][7] = $resArr[1]
    ;Y (Höhe)
    $retArray[$counter][8] = $resArr[2]
    ;Treiberversion
    $retArray[$counter][9] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverVersion")
    ;Treiberdatum
    $retArray[$counter][10] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverDate")
    ;*.Inf-Datei
    $retArray[$counter][11] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfPath")
    ;Inf-Section
    $retArray[$counter][12] = RegRead($Mainkey & "\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfSection")
    EndIf
    $j = $j + 1
    WEnd

    $i = $i + 1
    WEnd
    ReDim $retArray[$counter+1][13]
    $retArray[0][0] = $counter
    Return $retArray
    EndFunc

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

    #Include <String.au3>
    #include <array.au3>

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

    $test = _GetDisplays()
    _ArrayDisplay($test)

    [/autoit]
  • GetMonitor-Funktion testen

    • Bitboy
    • 21. Dezember 2009 um 11:36

    Son zufall, hab vor 2 Tagen selber an sowas gearbeitet, kam aber nicht sehr weit (Wusste nicht wie man rausbekommt ob der Monitor Primary oder Secondary ist)

    Hier ist mal mein Code, Erkannt werden alle Monitore die auch im Gerätemanager angezeigt werden

    Spoiler anzeigen
    [autoit]

    ;####################################################################
    ;#
    ;# Func _GetDisplays() ermittelt benutzte Monitore
    ;#
    ;# Rückgabewerte: Array[0][0] = Anzahl der Monitore = n
    ;# Array[n][0] = Hersteller
    ;# Array[n][1] = Modell
    ;# Array[n][2] = Maximale Auflösung X (Breite)
    ;# Array[n][3] = Maximale Auflösung Y (Höhe)
    ;# Array[n][4] = Treiberversion
    ;# Array[n][5] = Treiberdatum, Format: MM-DD-YYYY
    ;# Array[n][6] = *.inf-Datei des Treibers
    ;# Array[n][7] = *.inf-Sektion Treibers
    ;#
    ;# Autor: Bitboy
    ;####################################################################
    Func _GetDisplays()
    Local $i=1, $j=1, $counter=0, $enumkey1, $enumkey2, $retArray[64][8], $resArr, $temp
    While 1
    $enumkey1 = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY", $i)
    If @error <> 0 then ExitLoop

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

    $j = 1
    While 1
    $enumkey2 = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1, $j)
    If @error <> 0 then ExitLoop
    RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2 & "\Control", "")
    If @error <> 1 Then
    $counter = $counter + 1
    $retArray[$counter][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Mfg")
    $retArray[$counter][1] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "DeviceDesc")
    $temp = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY\" & $enumkey1 & "\" & $enumkey2, "Driver")
    $resArr = StringSplit(RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "MaxResolution"), ",")
    $retArray[$counter][2] = $resArr[1]
    $retArray[$counter][3] = $resArr[2]
    $retArray[$counter][4] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverVersion")
    $retArray[$counter][5] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "DriverDate")
    $retArray[$counter][6] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfPath")
    $retArray[$counter][7] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\" & $temp, "InfSection")
    EndIf
    $j = $j + 1
    WEnd

    $i = $i + 1
    WEnd
    ReDim $retArray[$counter+1][8]
    $retArray[0][0] = $counter
    Return $retArray
    EndFunc

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

    #include <array.au3>
    $test = _GetDisplays()
    _ArrayDisplay($test)

    [/autoit]
  • Computer-Info

    • Bitboy
    • 20. Dezember 2009 um 21:14

    Die Anzahl der Kerne lässt sich auch so bestimmen:

    [autoit]

    Func GetCPUCores()
    Local $S_SYSTEM_INFO = DllStructCreate("ushort dwOemId;short wProcessorArchitecture;dword dwPageSize;ptr lpMinimumApplicationAddress;" & _
    "ptr lpMaximumApplicationAddress;long_ptr dwActiveProcessorMask;dword dwNumberOfProcessors;dword dwProcessorType;dword dwAllocationGranularity;" & _
    "short wProcessorLevel;short wProcessorRevision")
    Local $err

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

    ;Anzahl der CPUs bestimmen
    $err = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr",DllStructGetPtr($S_SYSTEM_INFO))

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

    If @error Or Not IsArray($err) Then ;Fehler beim Dll Aufruf
    Return -1
    Else
    Return DllStructGetData($S_SYSTEM_INFO, "dwNumberOfProcessors")
    EndIf

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

    EndFunc

    [/autoit]
  • Offizieller Logo-Wettbewerb

    • Bitboy
    • 18. Dezember 2009 um 21:51

    Hab mich auch mal daran versucht.
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Bilder

    • autoit_hg.png
      • 25,93 kB
      • 468 × 60
    • autoit_t.png
      • 31,68 kB
      • 468 × 60
  • XP-CD Key auslesen

    • Bitboy
    • 8. Dezember 2009 um 17:30

    Danke für den Tipp! Hatte leider keine Möglichkeit das zu testen. Werde ich aber noch so einbauen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™