LV_Format_include[1.3].au3 AutoIt = tot

  • Tach...
    Ich hab mal wieder eines dieser Problemchen, die mir den Helm zum brennen bringen.

    Also mein Code:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Description=Druckermanagement Kantiwil
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.1
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs -------------------------------------------------------------------------------------

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

    SciTE Version: 2.27
    Author: Noach Bischof
    Script Function: Zeigt eine Liste aller Netzwerkdrucker an und bearbeitet deren Status.
    Script Version: 1.2

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

    #ce -------------------------------------------------------------------------------------
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <array.au3>
    #include <file.au3>
    #include <LV_Format_include[1.3].au3>
    #include <EditConstants.au3>

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

    Global $file1, $file2, $file3, $file4, $array1, $array2, $iBkCol, $iCol, $iSize, $iWeight, $sFont
    $path1 = "\\dc1\netlogon\schueler\schueler.kix" ;Pfad zur Schülerliste
    $path2 = "\\dc1\netlogon\lehrer\lehrer.kix" ;Pfad zur Lehrerliste
    $Form1 = GUICreate("Printer Manager - Version 1.2", 386, 500, -1, -1)
    $ListView1 = GUICtrlCreateListView("Druckername|Status", 8, 8, 265, 485)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) ;Setzt die Spaltenbreite von Spalte 1
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 111) ;Setzt die Spaltenbreite von Spalte 2
    $Button1 = GUICtrlCreateButton("Aktivieren", 280, 8, 97, 25)
    $Button2 = GUICtrlCreateButton("Deaktivieren", 280, 40, 97, 25)
    $Button3 = GUICtrlCreateButton("Schliessen", 280, 72, 97, 25)
    GUISetState(@SW_SHOW)
    _GUICtrlListView_Formatting_Startup($Form1, $ListView1)
    _GUICtrlListView_DefaultsSet($iBkCol=0xFF0000, $iCol=0x000000, $iSize=14, $iWeight=400, $sFont='Arial')
    _FileReadToArray($path1, $array1)
    _FileReadToArray($path2, $array2)
    $search5 = _ArraySearch($array1, ";Start Printer Mounten") ;Startmarker in der Schülerliste suchen
    $search6 = _ArraySearch($array1, ";Printer Mounten Ende") ;Endmarker in der Schülerliste suchen
    $search7 = _ArraySearch($array2, ";Start Printer Mounten") ;Startmarker in der Lehrerliste suchen
    $search8 = _ArraySearch($array2, ";Printer Mounten Ende") ;Endmarker in der Lehrerliste suchen
    Do ;Alle Zeilen nach der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search6)
    $groesse1 = UBound($array1)
    Until $search6 = $groesse1
    Do ;Alle Zeilen vor der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search5)
    $search5 = $search5 - 1
    Until $search5 = -1
    Do ;Alle Zeilen nach der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search8)
    $groesse2 = UBound($array2)
    Until $search8 = $groesse2
    Do ;Alle Zeilen vor der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search7)
    $search7 = $search7 - 1
    Until $search7 = -1
    $item = 0
    $abzug = 0 ;Müssen einzeln deklariert werden, denn $abzug steht für die Nummer vorhandener Drucker, $item steht für die Anzahl bereits durchsuchter Linien
    $size = UBound($array2)
    Do ;ListView auffüllen
    If StringLeft($array2[$item], 4) = ";ADD" Then ;Wenn der Drucker deaktiviert ist
    $test = StringSplit($array2[$item], "\") ;Teilt eine Linie an jedem \ in ein array
    $delimiters = UBound($test) ;Wieviel mal die Linie im Array aufgeteilt wurde
    If $delimiters = 3 Then ;In der Schülerliste
    $tt = 2 ;Der Druckername befindet sich im Array an 2ter Stelle
    Else ;In der Lehrerliste
    $tt = 4 ;Der Druckername befindet sich im Array an 4ter Stelle
    EndIf
    $string = StringTrimRight($test[$tt], 2) ;Filtert den Druckernamen raus
    $ttt = _GUICtrlListView_AddItem($ListView1, $string)
    $sss = _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "deaktiviert", 1) ;Schreibt den Drucker in die Liste und setzt Status: "deaktiviert"
    _GUICtrlListView_FormattingCell($ListView1, $ttt, $sss, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)
    $item = $item + 1 ;Setzt die Zeilennummer um 1 höher
    Else ;Wenn der Drucker aktiviert ist
    If StringLeft($array2[$item], 3) = "ADD" Then ;Wenn der Drucker aktiviert ist
    $test = StringSplit($array2[$item], "\") ;Teilt eine Linie an jedem \ in ein array
    $delimiters = UBound($test) ;Wieviel mal die Linie im Array aufgeteilt wurde
    If $delimiters = 3 Then ;In der Schülerliste
    $tt = 2 ;Der Druckername befindet sich im Array an 2ter Stelle
    Else ;In der Lehrerliste
    $tt = 4 ;Der Druckername befindet sich im Array an 4ter Stelle
    EndIf
    $string = StringTrimRight($test[$tt], 2) ;Filtert den Druckernamen raus
    $ttt = _GUICtrlListView_AddItem($ListView1, $string)
    $sss = _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "aktiviert", 1) ;Schreibt den Drucker in die Liste und setzt Status: "aktiviert"
    _GUICtrlListView_FormattingCell($ListView1, $ttt, $sss, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)
    $item = $item + 1 ;Setzt die Zeilennummer um 1 höher
    Else
    $abzug = $abzug + 1 ;Setzt die Druckeranzahl um 1 höher
    $item = $item + 1 ;Setzt die Zeilennummer um 1 höher
    EndIf
    EndIf
    Until $item = $size
    _GUICtrlListView_RegisterSortCallBack($ListView1) ;Liste sortierbar machen
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE ;Programm beim Klick auf das Rote Kreuz beenden
    Exit
    Case $Button3 ;Programm beim Klick auf "Abbrechen" beenden
    Exit
    Case $Button2 ;Sobald der "Deaktivieren"-Button gedrückt wird
    $selected = 0 ;Die Suche nach dem ausgewählten Element beginnt im Array an der Stelle 0
    While True ;Endlosschleife
    $is = _GUICtrlListView_GetItemSelected($ListView1, $selected) ;Überprüft ob das Element ausgewählt ist
    If $is = "True" Then
    ExitLoop ;Springt aus der Endlosschleife
    Else
    $selected = $selected + 1 ;Beim nächsten Durchlauf, wird das nächste Element überprüft
    EndIf
    WEnd ;Sucht das ausgewählte Element
    $auswahl = _GUICtrlListView_GetItemText($ListView1, $selected) ;Liest den Namen des Ausgewählten Druckers
    $sub = _GUICtrlListView_GetItemText($ListView1, $selected, 1) ;Liest den Status des Ausgewählten Druckers
    _FileReadToArray($path1, $file3) ;Liest die Schülerliste in ein Array
    _FileReadToArray($path2, $file4) ;Liest die Lehrerliste in ein Array
    If $sub = "aktiviert" Then ;Wenn der Druckerstatus "Aktiviert" ist
    $search5 = _ArraySearch($file3, 'ADDPRINTERCONNECTION ("\\srv02\' &$auswahl &'")') ;Durchsucht das Array der Schülerliste nach dem Drucker
    $search6 = _ArraySearch($file4, 'ADDPRINTERCONNECTION ("$print\' &$auswahl &'")') ;Durchsucht das Array der Lehrerliste nach dem Drucker
    If $search5 = @error Then ;Falls nur die Schülerliste den Drucker enthält
    _FileWriteToLine($path2, $search6, ';ADDPRINTERCONNECTION ("$print\' &$auswahl &'")', 1) ;Verändert den Druckerstatus in der Lehrerliste
    Else ;Falls beide Files den Drucker enthalten
    _FileWriteToLine($path1, $search5, ';ADDPRINTERCONNECTION ("\\srv02\' &$auswahl &'")', 1) ;Verändert den Druckerstatus in der Schülerrliste
    _FileWriteToLine($path2, $search6, ';ADDPRINTERCONNECTION ("$print\' &$auswahl &'")', 1) ;Verändert den Druckerstatus in der Lehrerliste
    EndIf
    EndIf ;Schreibt den veränderten Status in beide Dateien soweit beide den Ausgewählten Drucker enthalten
    GUICtrlDelete($ListView1) ;Löscht die Liste
    $ListView1 = GUICtrlCreateListView("Druckername|Status", 8, 8, 265, 485)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) ;Setzt die Spaltenbreite von Spalte 1
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 111) ;Setzt die Spaltenbreite von Spalte 2
    _FileReadToArray($path1, $array1) ;Liest die Schülerliste in ein anderes Array
    _FileReadToArray($path2, $array2) ;Liest die Lehrerliste in ein anderes Array
    $search5 = _ArraySearch($array1, ";Start Printer Mounten") ;Startmarker in der Schülerliste suchen
    $search6 = _ArraySearch($array1, ";Printer Mounten Ende") ;Endmarker in der Schülerliste suchen
    $search7 = _ArraySearch($array2, ";Start Printer Mounten") ;Startmarker in der Lehrerliste suchen
    $search8 = _ArraySearch($array2, ";Printer Mounten Ende") ;Endmarker in der Lehrerliste suchen
    Do ;Alle Zeilen nach der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search6)
    $groesse1 = UBound($array1)
    Until $search6 = $groesse1
    Do ;Alle Zeilen vor der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search5)
    $search5 = $search5 - 1
    Until $search5 = -1
    Do ;Alle Zeilen nach der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search8)
    $groesse2 = UBound($array2)
    Until $search8 = $groesse2
    Do ;Alle Zeilen vor der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search7)
    $search7 = $search7 - 1
    Until $search7 = -1
    $item = 0
    $abzug = 0 ;Müssen einzeln deklariert werden, denn $abzug steht für die Nummer vorhandener Drucker, $item steht für die Anzahl bereits durchsuchter Linien
    $size = UBound($array2) ;Anzahl vorhandener Drucker
    Do ;Füllt die ListView neu auf
    If StringLeft($array2[$item], 4) = ";ADD" Then
    $test = StringSplit($array2[$item], "\")
    $delimiters = UBound($test)
    If $delimiters = 3 Then
    $tt = 2
    Else
    $tt = 4
    EndIf
    $string = StringTrimRight($test[$tt], 2)
    _GUICtrlListView_AddItem($ListView1, $string)
    _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "deaktiviert", 1)
    $item = $item + 1
    Else
    If StringLeft($array2[$item], 3) = "ADD" Then
    $test = StringSplit($array2[$item], "\")
    $delimiters = UBound($test)
    If $delimiters = 3 Then
    $tt = 2
    Else
    $tt = 4
    EndIf
    $string = StringTrimRight($test[$tt], 2)
    _GUICtrlListView_AddItem($ListView1, $string)
    _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "aktiviert", 1)
    $item = $item + 1
    Else
    $abzug = $abzug + 1
    $item = $item + 1
    EndIf
    EndIf
    Until $item = $size
    _GUICtrlListView_RegisterSortCallBack($ListView1)
    Case $Button1 ;Sobald der "Aktivieren"-Button gedrückt wird
    $selected = 0
    While True
    $is = _GUICtrlListView_GetItemSelected($ListView1, $selected)
    If $is = "True" Then
    ExitLoop
    Else
    $selected = $selected + 1
    EndIf
    WEnd
    $auswahl = _GUICtrlListView_GetItemText($ListView1, $selected)
    $sub = _GUICtrlListView_GetItemText($ListView1, $selected, 1)
    _FileReadToArray($path1, $file3)
    _FileReadToArray($path2, $file4)
    If $sub = "deaktiviert" Then
    $search5 = _ArraySearch($file3, ';ADDPRINTERCONNECTION ("\\srv02\' &$auswahl &'")')
    $search6 = _ArraySearch($file4, ';ADDPRINTERCONNECTION ("$print\' &$auswahl &'")')
    If $search5 = @error Then
    _FileWriteToLine($path2, $search6, 'ADDPRINTERCONNECTION ("$print\' &$auswahl &'")', 1)
    Else
    _FileWriteToLine($path1, $search5, 'ADDPRINTERCONNECTION ("\\srv02\' &$auswahl &'")', 1)
    _FileWriteToLine($path2, $search6, 'ADDPRINTERCONNECTION ("$print\' &$auswahl &'")', 1)
    EndIf
    EndIf
    GUICtrlDelete($ListView1)
    $ListView1 = GUICtrlCreateListView("Druckername|Status", 8, 8, 265, 485)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) ;Setzt die Spaltenbreite von Spalte 1
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 111) ;Setzt die Spaltenbreite von Spalte 2
    _FileReadToArray($path1, $array1) ;Liest die Schülerliste erneut in ein Array
    _FileReadToArray($path2, $array2) ;Liest die Lehrerliste erneut in ein Array
    $search5 = _ArraySearch($array1, ";Start Printer Mounten") ;Startmarker in der Schülerliste suchen
    $search6 = _ArraySearch($array1, ";Printer Mounten Ende") ;Endmarker in der Schülerliste suchen
    $search7 = _ArraySearch($array2, ";Start Printer Mounten") ;Startmarker in der Lehrerliste suchen
    $search8 = _ArraySearch($array2, ";Printer Mounten Ende") ;Endmarker in der Lehrerliste suchen
    Do ;Alle Zeilen nach der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search6)
    $groesse1 = UBound($array1)
    Until $search6 = $groesse1
    Do ;Alle Zeilen vor der Schülerdruckeraufzählung entfernen
    _ArrayDelete($array1, $search5)
    $search5 = $search5 - 1
    Until $search5 = -1
    Do ;Alle Zeilen nach der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search8)
    $groesse2 = UBound($array2)
    Until $search8 = $groesse2
    Do ;Alle Zeilen vor der Lehrerdruckeraufzählung entfernen
    _ArrayDelete($array2, $search7)
    $search7 = $search7 - 1
    Until $search7 = -1
    $item = 0
    $abzug = 0 ;Müssen einzeln deklariert werden, denn $abzug steht für die Nummer vorhandener Drucker, $item steht für die Anzahl bereits durchsuchter Linien
    $size = UBound($array2) ;Anzahl vorhandener Drucker
    Do ;Füllt die ListView neu auf
    If StringLeft($array2[$item], 4) = ";ADD" Then
    $test = StringSplit($array2[$item], "\")
    $delimiters = UBound($test)
    If $delimiters = 3 Then
    $tt = 2
    Else
    $tt = 4
    EndIf
    $string = StringTrimRight($test[$tt], 2)
    _GUICtrlListView_AddItem($ListView1, $string)
    _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "deaktiviert", 1)
    $item = $item + 1
    Else
    If StringLeft($array2[$item], 3) = "ADD" Then
    $test = StringSplit($array2[$item], "\")
    $delimiters = UBound($test)
    If $delimiters = 3 Then
    $tt = 2
    Else
    $tt = 4
    EndIf
    $string = StringTrimRight($test[$tt], 2)
    _GUICtrlListView_AddItem($ListView1, $string)
    _GUICtrlListView_AddSubItem($ListView1, $item - $abzug, "aktiviert", 1)
    $item = $item + 1
    Else
    $abzug = $abzug + 1
    $item = $item + 1
    EndIf
    EndIf
    Until $item = $size
    _GUICtrlListView_RegisterSortCallBack($ListView1)
    Case $ListView1 ;Sortiert die Liste Alphabetisch (auf-/absteigend)
    _GUICtrlListView_SortItems($ListView1, GUICtrlGetState($ListView1))
    EndSwitch
    WEnd

    [/autoit]

    Also sobald ich das starte, stürzt AutoIt ab (!>12:53:05 AutoIT3.exe ended.rc:-1073741819).
    Ich hab mal debuggt und bin darauf gekommen, dass das Problem in Zeile 87 (und wahrscheinlich auch 73) beim erstellen eines neuen Items auftritt. Komisch: diese Funktion ist ja von AutoIt selber und hat nichts mit der includeten LV_Format_include[1.3].au3 UDF zu tun...tja vieleicht kann mir ja der Herr BugFix helfen, ist ja deine UDF und vieleicht ist dir das auch schonmal passiert.

    Die UDF gibts hier: https://autoit.de/index.php?page…554ec899348e62d

    Bild1: Ich beim debuggen

    Einmal editiert, zuletzt von General Kaboom (12. Oktober 2011 um 13:30)

    • Offizieller Beitrag

    Ähhm...

    [autoit]

    _GUICtrlListView_DefaultsSet($iBkCol=0xFF0000, $iCol=0x000000, $iSize=14, $iWeight=400, $sFont='Arial')

    [/autoit]

    Wenn du die Defaults setzen willst, dann haben die Variablennamen nix im Aufruf verloren.
    Die in der Funktion vorbelegten Defaults setzt du einfach mit:

    [autoit]

    _GUICtrlListView_DefaultsSet()

    [/autoit]

    , möchtest du eigene Werte setzen dann mit:

    [autoit]

    _GUICtrlListView_DefaultsSet(0xFF0000, 0x000000, 14, 400, 'Arial')

    [/autoit]


    Und dieser falsche Aufruf führt mit Sichrheit zu einem Fehler. ;) Nutzt du nicht STRG+F5 um die Syntax zu checken? :whistling: - Da hättest du bereits den Verweis auf diesen Fehler bekommen.