Drucker installieren

  • Hallo! Ich bin noch ganz neu in der Materie und wollte ein Script schreiben um Netzwerkdrucker über eine Auswahl zu installieren. Jedoch klappt dies noch nicht so ganz.

    Es sollen multiple checkboxen möglich sein, sodass mehrere Drucker hintereinander in einer Routine installiert werden können. Wie stelle ich das am besten an?

    Soweit habe ich meinen Code geschrieben:

    [autoit]


    HotKeySet("{ESC}", "_exit")

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

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $GUI_GlobalSpam = GUICreate("Drucker installieren", 500, 309, 398, 153)

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

    $GUI_button_installieren = GUICtrlCreateButton("Installieren", 40, 224, 89, 25)

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

    $GUI_text_header = GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen:", 10, 10, 500, 17)

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

    $GUI_text_Modell = GUICtrlCreateLabel("Modell:", 10, 30, 250, 17)
    $GUI_checkbox_Drucker1 = GUICtrlCreateCheckbox("Drucker1", 10, 50, 97, 17)
    $GUI_checkbox_Drucker2 = GUICtrlCreateCheckbox("Drucker2", 10, 70, 97, 17)
    $GUI_checkbox_Drucker3 = GUICtrlCreateCheckbox("Drucker3", 10, 90, 97, 17)
    $GUI_checkbox_Drucker4 = GUICtrlCreateCheckbox("Drucker4", 10, 110, 97, 17)

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

    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_button_installieren
    If GUICtrlRead($GUI_checkbox_Drucker1) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker1 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker2) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker2 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker3) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker3 wird installiert')
    ElseIf GUICtrlRead($GUI_checkbox_Drucker4) = $GUI_CHECKED Then
    MsgBox(262144, "OK!", 'Drucker4 wird installiert')
    Else
    MsgBox(262144, "Achtung!", 'Kein Drucker gewählt')
    EndIf
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    GUIDelete()
    Exit

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    statt der Testweise MsgBox sollte er eigentlich nur einen Pfad öffnen, nur das habe ich auch nicht gefunden wie das geht. Quasi nur "\\server\druckerfreigabe", dadurch wird der Drucker installiert.

    Wenn ich jetzt mehrere Drucker auswähle, dann kommt immer nur 1 MsgBox und zwar die erste. Er Sollte aber weiterlaufen bis alle checkboxen abgearbeitet sind.

    Bin über jede Hilfe dankbar!

    Grüße

  • Hallo Strikers,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem: dass nur eine MsgBox ersceint, liegt daran dass du mit ELSEIF weiter verzweigst, du musst aber jeden Fall einzeln betrachten/lösen, also so:

    Spoiler anzeigen
    [autoit]

    HotKeySet("{ESC}", "_exit")

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

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $GUI_GlobalSpam = GUICreate("Drucker installieren", 500, 309, 398, 153)

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

    $GUI_button_installieren = GUICtrlCreateButton("Installieren", 40, 224, 89, 25)

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

    $GUI_text_header = GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen:", 10, 10, 500, 17)

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

    $GUI_text_Modell = GUICtrlCreateLabel("Modell:", 10, 30, 250, 17)
    $GUI_checkbox_Drucker1 = GUICtrlCreateCheckbox("Drucker1", 10, 50, 97, 17)
    $GUI_checkbox_Drucker2 = GUICtrlCreateCheckbox("Drucker2", 10, 70, 97, 17)
    $GUI_checkbox_Drucker3 = GUICtrlCreateCheckbox("Drucker3", 10, 90, 97, 17)
    $GUI_checkbox_Drucker4 = GUICtrlCreateCheckbox("Drucker4", 10, 110, 97, 17)

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

    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_button_installieren
    If BitAND(GUICtrlRead($GUI_checkbox_Drucker1),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", 'Drucker1 wird installiert')
    If BitAND(GUICtrlRead($GUI_checkbox_Drucker2),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", 'Drucker2 wird installiert')
    If BitAND(GUICtrlRead($GUI_checkbox_Drucker3),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", 'Drucker3 wird installiert')
    If BitAND(GUICtrlRead($GUI_checkbox_Drucker4),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", 'Drucker4 wird installiert')

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

    If BitAND(GUICtrlRead($GUI_checkbox_Drucker1),$GUI_UNCHECKED) = $GUI_UNCHECKED And _
    BitAND(GUICtrlRead($GUI_checkbox_Drucker2),$GUI_UNCHECKED) = $GUI_UNCHECKED And _
    BitAND(GUICtrlRead($GUI_checkbox_Drucker3),$GUI_UNCHECKED) = $GUI_UNCHECKED And _
    BitAND(GUICtrlRead($GUI_checkbox_Drucker4),$GUI_UNCHECKED) = $GUI_UNCHECKED Then MsgBox(262144, "Achtung!", 'Kein Drucker gewählt')
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    GUIDelete()
    Exit

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    mfg autoBert

  • Hallo und danke für die erste Hilfe ;)

    Ich habe nun einiges gelesen, stolpere wohl aber immernoch über die einfachsten Sachen. Ich bekomme es einfach nicht hin, dass sich $i hochzählt. Ich weiß nicht wie ich es verknüpfen muss. Da ich mehrere Drucker habe, dachte ich an eine Schleife die mir die Zeilen selbst erstellt nach Anzahl der Drucker.

    Auch das Hochzählen per $i fügt sich nicht in der $GUI_checkbox_Drucker[$i] ein :(

    Über welchen Befehl lässt sich eine Netzwerkpfad ansprechen? DriveMap ? (\\Server\Druckerfreigabe)


    DANKE!!!

    Einmal editiert, zuletzt von Strikers (3. Dezember 2010 um 09:40)

  • Du musst auch schon die "" entfernen, sonst nimmt er es als String. Ist es nicht besser wenn du mit Arrays arbeitest? Hab gesehen du arbeitest schon mit Arrays, hast aber anscheinen d noch nicht ganz die Funktionsweise verstanden. Wenn dann musst du sie auch am Anfang vom Code als Array behandeln. Und vergess nicht, Arrays sind 0-basierend!

  • So in etwa:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    HotKeySet("{ESC}", "_exit")

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

    Global $aPrinter[4]
    Global $aPrinterName[4] = ["HPLJ2600", "HPLJ2601", "HPLJ2602", "HPLJ2603"]

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

    $hGui = GUICreate("Drucker installieren", 500, 309, 398, 153)
    $hInstall = GUICtrlCreateButton("Installieren", 40, 224, 89, 25)
    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen:", 10, 10, 500, 17)
    GUICtrlCreateLabel("Modell:", 10, 30, 250, 17)
    For $i = 0 To UBound($aPrinter) - 1
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 10, 50 + ($i * 20), 97, 17)
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then MsgBox(262144, "OK!", "Drucker " & $i + 1 & " wird installiert")
    Next

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

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • PERFEKT!!! VIELEN VIELEN DANK!!

    Das ist genau das was ich brauche. Und alles auch noch so kurz wie möglich durch die Schleifen.

    Jetzt nur noch eine Frage, ich habe Testweise die Drucker per printui.dll installiert, das geht auch wunderbar. Gibt es jedoch die Möglichkeit einen Befehl aufzurufen, der einfach nur den Freigabenamen öffnet? Denn so installiert sich der Drucker auch und ich bin dann auf keine dll's angewiesen.

    [autoit]


    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then Run("rundll32 printui.dll,PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName)

    [/autoit]

    Danke!

  • hallo Strikers,

    so kannst du das auch lösen!

    [autoit]


    #include <Process.au3>

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

    $sCommand = "start \\printserver\freigabename"
    _RunDOS ( $sCommand )

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

    den befehl kannst du dann ja auch noch in eine schleife packen ...

    gruß gmmg ;)

  • Hallo! Nochmals danke an alle! Es klappt nun alles so wie ich es brauche. :)

    Hier nochmal mein fertiges Script, vielleicht gibt es ja noch den ein oder anderen Verbesserungsvorschlag.
    Gibt es in meiner "Case $hInstall" Schleife eine einfachere Weise die If checked abfrage zu lösen die ich für FileOpen, FileWrite und FileClose gemacht habe?

    [autoit]


    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>
    #Include <File.au3>
    TraySetIcon("printer.ico")

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

    HotKeySet("{ESC}", "_exit")

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

    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = 'Server'
    Global $ClientPC = @ComputerName

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

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400, 398, 153)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)

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

    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)

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

    For $i = 0 To 12
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 10, 40 + ($i * 20), 110, 17)
    Next
    For $i = 13 To 25
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 135, 40 + (($i-13) * 20), 110, 17)
    Next
    For $i = 26 To 38
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 260, 40 + (($i-26) * 20), 110, 17)
    Next
    For $i = 39 To UBound($aPrinter) - 1
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], 375, 40 + (($i-39) * 20), 110, 17)
    Next

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

    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then RunWait("rundll32 printui.dll,PrintUIEntry /in /n \\"&$Server&"\"&$aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then $file = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then FileWrite($file, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    If BitAND(GUICtrlRead($aPrinter[$i]),$GUI_CHECKED) = $GUI_CHECKED Then FileClose($file)
    Next
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0,"1. Schritt erledigt ...","Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Grüße

  • Hier noch nen bisschen gekürzt.

    Spoiler anzeigen
    [autoit]

    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>

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

    TraySetIcon("printer.ico")

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

    HotKeySet("{ESC}", "_exit")

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

    Global $iLeft = 10
    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = "Server"
    Global $ClientPC = @ComputerName

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

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)
    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)
    For $i = 0 To UBound($aPrinter) - 1
    If $i = 13 Or $i = 26 Or $i = 39 Then $iLeft += 125
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], $iLeft, 40 + ($i * 20), 110, 17)
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    $hFile = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    EndIf
    Next
    FileClose($hFile)
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0, "1. Schritt erledigt ...", "Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]


    Hab auch die File.au3 entfernt, brauchst du ja nicht. Was du noch machen kannst ist $aPrinterName zu $aPrinter hinzufügen und daraus ein 2D-Array machen.
    Und natürlich die Schleife sinnvoller umgeschrieben.
    Hab dannoch gemerkt das die Left-Position in der 4. For-Schleife falsch war, hätte 385 sein sollen und nicht 375.

    Einmal editiert, zuletzt von m-obi (3. Dezember 2010 um 23:36)

  • Hi m-obi, das klappt so leider nicht mehr, nun zeigt er in der 2. Spalte das Ergebnis fortlaufen in der Höhe unter der 1. Spalte an. Es geht nur wenn ich noch die Höhe ($iTop) mit einkalkuliere.
    Was mir nun auch aufgefallen ist, wenn ich jetzt keine checkbox auswähle, dann erzeugt er mir beim klicken auf Installieren trotzdem eine TXT Datei, vorher hat er das nur bei angehackter checkbox gemacht.

    Spoiler anzeigen
    [autoit]


    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>

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

    TraySetIcon("printer.ico")

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

    HotKeySet("{ESC}", "_exit")
    Global $iLeft = 10
    Global $iTop = 0
    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = "Server"
    Global $ClientPC = @ComputerName

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

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)
    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)
    For $i = 0 To UBound($aPrinter) - 1
    If $i = 13 Or $i = 26 Or $i = 39 Then $iLeft += 125
    If $i = 0 Then $iTop = 0
    If $i = 13 Then $iTop = 13
    If $i = 26 Then $iTop = 26
    If $i = 39 Then $iTop = 39
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], $iLeft, 40 + (($i-$iTop) * 20), 110, 17)
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    $hFile = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    EndIf
    Next
    FileClose($hFile)
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0, "1. Schritt erledigt ...", "Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Ja das mit der Höhe hatte ich vergessen. Und das mit der TXT-Datei wusste ich nicht. Dachte das ist egal. Aber nun das verbesserte Script. Habs aber nicht getestet, bin mit Knoppix Live CD online.

    Spoiler anzeigen
    [autoit]

    #Region
    #AutoIt3Wrapper_icon=printer.ico
    #AutoIt3Wrapper_outfile=Drucker.exe
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    #include <GUIConstants.au3>

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

    TraySetIcon("printer.ico")

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

    HotKeySet("{ESC}", "_Exit")

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

    Global $iLeft = 10
    Global $iTop = -1
    Global $aPrinter[47]
    Global $aPrinterName[47] = ["......"]
    Global $Server = "Server"
    Global $ClientPC = @ComputerName

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

    $hGui = GUICreate("Netzwerk Drucker installieren", 500, 400)
    $hDelete = GUICtrlCreateButton("Alte Netzwerkdrucker löschen!", 150, 320, 200, 25)
    $hInstall = GUICtrlCreateButton("Ausgewählte Drucker Installieren", 150, 350, 200, 25)
    GUICtrlCreateLabel("Bitte alle zu installierende Drucker auswählen!", 10, 10, 500, 17)
    For $i = 0 To UBound($aPrinter) - 1
    If $i = 13 Or $i = 26 Or $i = 39 Then
    $iLeft += 125
    $iTop = 0
    Else
    $iTop += 1
    EndIf
    $aPrinter[$i] = GUICtrlCreateCheckbox($aPrinterName[$i], $iLeft, 40 + ($iTop * 20), 110, 17)
    Next
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $hInstall
    ;Überprüfen welche checkboxen aktiviert sind und dementsprechend Drucker installieren
    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    If Not FileExists(@ScriptDir & "/"& $ClientPC & ".txt") Then $hFile = FileOpen(@ScriptDir & "/"& $ClientPC & ".txt",1)
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    EndIf
    Next
    FileClose($hFile)
    Case $hDelete
    ;Hier fehlt noch die Befehlszeile zum löschen der Netzwerkdrucker
    MsgBox(0, "1. Schritt erledigt ...", "Alte Netzwerdrucker wurden vom Computer gelöscht.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Hi, es sieht so perfekt aus.
    Ich habe nur noch das FileClose mit in die If BitAND Scheife aufgenommen, da sich ansonsten das Programm schließt, wenn man keine checkbox angehackt hat und auf installieren klickt.

    [autoit]


    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    If Not FileExists($LogDir & "/"& $ClientPC & ".txt") Then $hFile = FileOpen($LogDir & "/"& $ClientPC & ".txt",1)
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    FileClose($hFile)
    EndIf
    Next

    [/autoit]

    Werde es mal am Montag testen ob es in der Praxis auch so funktioniert :)

    Danke für die nette und gute Hilfe!!

  • Jedesmal FileClose nach FileWrite aufzurufen, macht aber kein Sinn. Da du ja beim nächsten Durchlauf, wenn wieder etwas angehackt ist, FileWrite machst und ihm dann das Handle von FileOpen fehlt, da du ja vorher FileClose gemacht hast. Probier das mal.

    [autoit]

    For $i = 0 To UBound($aPrinter) - 1
    If BitAND(GUICtrlRead($aPrinter[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    If Not FileExists($LogDir & "/"& $ClientPC & ".txt") Then $hFile = FileOpen($LogDir & "/"& $ClientPC & ".txt",1)
    RunWait("rundll32 printui.dll, PrintUIEntry /in /n \\" & $Server & "\" & $aPrinterName[$i])
    ;Nach hinzufügen des Druckers wird eine Datei mit den installierten Druckern und dem Rechnername erzeugt.
    FileWrite($hFile, $aPrinterName[$i] & @CRLF) ;@CRLF = Zeilenumbruch
    EndIf
    If $i = UBound($aPrinter) - 1 And FileExists($LogDir & "/"& $ClientPC & ".txt") Then FileClose($hFile)
    Next

    [/autoit]
  • Guten Morgen!

    Ich habe es getestet und es klappt einwandfrei. Jetzt ist mir aber noch eine Idee gekommen die das ganze noch etwas vereinfachen soll. Vielleicht ist das möglich umzusetzten. Hier mal mein Gedanke:

    Das Programm liest vorher alle alten Drucker aus und sucht nach Vorgabe den neuen Referenzdrucker. Bei gefundenem Drucker macht er bereits einen Haken bei dem neuen Drucker. Ist dies möglich (denke schon) nur mit welchen Aufwand?

    Hier bereits mein erster "Anfang" der Erweiterung.

    Wie man vorhandene Drucker ausliest habe ich bereits gefunden:

    [autoit]


    Dim $Drucker[15]
    Dim $installierteDrucker

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

    For $i=1 to 15
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

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

    $Drucker[0]=$i-1

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

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= $Drucker[$j] & @CR
    Next

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

    MsgBox(0,"Installierte Drucker", $installierteDrucker)

    [/autoit]

    Der Drucker wird dann wie folgt ausgegeben: "HP Laserjet 2600 LA123"

    Jeder alter Druckername hat einen unique Teil den ich zum vergleichen brauche, in diesem Fall wäre es LA123, der Rest ist uninteressant.

    Ich habe mir das iergendwie so vorgestellt, was ich erstmal per Hand (manuell) zuweise. Jedem alten Drucker den neuen Referenzdrucker.

    [autoit]


    Global $aPrinterName[47] = ["NEUER_DRUCKER_NAME", "LJ2600_LA123", ....]
    Global $aOldPrinterName[47] = ["ALTER_DRUCKER_NAME", "HP LaserJet 2600 LA123", ....]

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

    ;sucht im OldPrinterName nach einer Übereinstimmung und soll dann einen Haken setzten bei der checkbox des neuen Druckernamens
    $Drucker[$j] <> $aOldPrinterName[47]

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

    GUICtrlSetState ( $checkbox_des_neuen_Druckers, 1 )

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


    Grüße

  • So, habe noch etwas weiter probiert und diesen Quellcode erstellt (geht so aber leider noch nicht)

    [autoit]


    ; Alte Drucker auslesen
    Dim $Drucker[10]
    Dim $installierteDrucker

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

    For $i=1 to 10
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

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

    $Drucker[0]=$i-1

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

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= "'$Drucker[$j]', "
    Next
    ; Ende Alte Drucker auslesen

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

    Global $aPrinterName[47] = ["DS08", "DS02", "DS03", "DW03", ......]
    Global $aOldPrinterName[47] = ["LAV8", "LAS2", "LAV3", "LAR03", ......]
    Global $aInstalledPrinter[10] = ["$installierteDrucker"] ; sollte dann so aussehen: ["laser LAV3", "Drucker HP LAR03", "HR34 LAV8", "OfficeJet 356 LAS2"]

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

    For $i = 0 to 47 Step 1
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName) <> 0 then MsgBox(0,"Test", $aPrinterName[$i])
    ;StringInStr(zu durchsuchender String, enthaltenes Wort) bei Übereinstimmung mache folgendes....
    next

    [/autoit]

    Er sollte nun aus den " $aInstalledPrinter" eine Übereinstimmung mit den "$aOldPrinterName[47]" finden und dann den richtigen "$aPrinterName[47]" wiedergeben. Nur die Installierten Drucker werden willkürlich dargestellt und somit kann ich nicht sagen 5. Drucker entspricht 5. neuen Drucker.

    Grüße

  • Hallo! Ich habe es nun soweit hinbekommen, dass er mit aus dem array der installierten Drucker die neuen Namen zuweist.
    Jedoch erscheint mir das etwas kompliziert, vielleicht geht das noch eleganter, da ich ja diesen Code Schnipsel noch in mein Programm aufnehmen muss:

    [autoit]


    ; Alte Drucker auslesen
    Dim $Drucker[10]
    Dim $installierteDrucker

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

    For $i=1 to 10
    $Drucker[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$i)
    If @error <> 0 then ExitLoop
    Next

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

    $Drucker[0]=$i-1

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

    For $j = 1 to $Drucker[0]
    $installierteDrucker &= $Drucker[$j] & @CRLF
    Next
    ; Ende Alte Drucker auslesen

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

    ;MsgBox(0,"Installierte Drucker", $installierteDrucker)

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

    Global $aPrinterName[47] = ["DS08", "DS02", "DS03", "DW03"] ;neue Druckernamen
    Global $aOldPrinterName[47] = ["LAV8", "LAS2", "LAV3", "LAR03"] ;alte unique Druckernamen
    Global $aInstalledPrinter[10] = ["laser LAV3", "Drucker HP LAR03", "HR34 LAV8", "OfficeJet 356 LAS2", "Local Drucker"] ;auf den PC installierte Drucker inkl. der unique Druckernamen

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

    For $i = 0 to 47 Step 1
    ;StringInStr(zu durchsuchender String, enthaltenes Wort) bei Übereinstimmung mache folgendes....
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[0]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[0])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[1]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[1])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[2]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[2])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[3]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[3])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[4]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[4])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[5]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[5])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[6]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[6])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[7]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[7])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[8]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[8])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[9]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[9])
    if StringInStr($aInstalledPrinter[$i], $aOldPrinterName[10]) <> 0 then MsgBox(0,"Test", $aInstalledPrinter[$i] & " --> " & $aPrinterName[10])
    next

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