Tach...
Ich hab mal wieder eines dieser Problemchen, die mir den Helm zum brennen bringen.
Also mein Code:
Spoiler anzeigen
#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 -------------------------------------------------------------------------------------
SciTE Version: 2.27
Author: Noach Bischof
Script Function: Zeigt eine Liste aller Netzwerkdrucker an und bearbeitet deren Status.
Script Version: 1.2
#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>
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
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