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. Lashandan

Beiträge von Lashandan

  • Eine Funktion mehrfach starten

    • Lashandan
    • 25. April 2019 um 09:22

    Hallo liebe AutoIter,

    ich brauche eure Unterstützung bei folgendem Vorhaben.

    Ich habe eine Textdatei mit n Einträgen pro Zeile (für das Beispiel sagen wir mal 100 Einträge).

    Diese Einträge möchte ich zählen lassen.

    Dafür nehme ich $n = FileReadToArray($Textdatei)

    Weiterhin definiere ich eine Variable die für die Anzahl der zu startenden Instanzen stehen soll.

    Als Beispiel $i = 10 für 10 zu startende Instanzen

    Jede Instanz soll 10 Einträge aus der Textdatei lesen und zum Weiterverarbeiten nutzen.

    Also $p = Ubound($n) / $i

    Jetzt soll mittels for-Schleife die Funktion aufgerufen werden und wie folgt arbeiten (Beispiel: for $x = 1 to $i):

    _Funktion(1) lese die Einträge aus der Textdatei von 1-10 und verarbeite sie.

    _Funktion(2) lese die Einträge aus der Textdatei von 11-20 und verarbeite sie.

    _Funktion(3) lese die Einträge aus der Textdatei von 21-30 und verarbeite sie usw.

    Ist dies möglich?

    Wenn ja, wie gehe ich vor?

  • ISN AutoIt Studio

    • Lashandan
    • 24. April 2019 um 08:05
    Zitat von ISI360

    OK. Hast du auch sicher alle Dateien aus dem Archiv mit entpackt? Lt. der Fehlermeldung fehlt hier die ISN_UDF_RDC.au3 im Ordner "Includes"?

    Ich bekomme bereits beim Entpacken einen Fehler:

    pasted-from-clipboard.png

  • ISN AutoIt Studio

    • Lashandan
    • 23. April 2019 um 16:14

    Auch hierbei erhalte ich leider eine Fehlermeldung:

    pasted-from-clipboard.png

  • ISN AutoIt Studio

    • Lashandan
    • 23. April 2019 um 15:42
    Zitat von ISI360

    Da müsstest du bitte die Source Version herunterladen und über die AutoIt_Studio.au3 starten. Dann sind auch die Fehlermeldungen Detailierter.
    Da aber in wenigen Tagen ein neues Update (1.09) erscheint, bitte ich dich vlt. noch um etwas geduld.

    In Ordnung, dann werde ich mich einfach noch etwas gedulden ;)

    Danke vorab!

  • ISN AutoIt Studio

    • Lashandan
    • 23. April 2019 um 14:49

    Hi ISI360

    ich habe heute erst dein ISN AutoIt Studio entdeckt und wollte direkt loslegen und damit arbeiten...

    leider erhalte ich immer wieder an verschiedenen Stellen folgende Fehlermeldung:

    Kannst du damit was anfangen bzw. mir erläutern was falsch läuft?

  • Umbenannt: Installierte Drucker Remote auslesen

    • Lashandan
    • 2. April 2019 um 11:31

    Hallo nochmal in die Runde und nochmal vielen Dank an alle Helfer. :thumbup::party::klatschen::thumbup:

    Letztlich hat mich der Code von Bitnugger am meisten zum Ziel geführt. :theke:

    Hier nun also der finale Code:

    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=DruckerInfo.ico
    #AutoIt3Wrapper_Outfile=DruckerInfo.exe
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <TrayConstants.au3>
    #include <WinAPI.au3>
    #pragma compile(Icon, DruckerInfo.ico)
    #RequireAdmin
    ;~ If IsAdmin() Then MsgBox(0, "", "Das Programm wird mit Adminrechten ausgeführt", 1)
    
    Local $computer = @ComputerName
    
    ; 1. GUI Fenstername
    Local $hGUI = GUICreate("DruckerInfo", 550, 400)
    GUISetFont(9)
    Local $sFile = @ScriptDir & "\DruckerInfo.ico"
    GUISetIcon($sFile)
    
    ; 2. Rechnername
    GUICtrlCreateLabel("Rechnername: ", 20, 12.5, 100, 20)
    ; 2.1 RechnernameInputBox
    $sComputer = GUICtrlCreateInput($computer, 105, 10, 100, 20, BitOR(0x0004, 0x1000, 0x0008))
    $vDLL = 'user32.dll'
    ; 2.2. RechnernameAbfrageButton
    $tabAbfragen = GUICtrlCreateButton("Abfragen", 205, 10, 100, 20)
    
    GUICtrlCreateLabel("Status: ", 310, 12.5, 50, 20)
    $status = "Fertig!"
    $lStatus = GUICtrlCreateLabel($status, 370, 12.5, 250, 20)
    GUICtrlCreateLabel("Fortschritt: ", 310, 32.5, 100, 20)
    Global $idProgressbar1 = GUICtrlCreateProgress(370, 30, 100, 20, $PBS_Smooth)
    GUICtrlSetColor(-1, 32250)
    $iWait = 20
    $iSavePos = 0
    
    ; 3. Trennlinie
    GUICtrlCreateGraphic(0, 50, 550, 1, $SS_BLACKFRAME)
    
    ; 4. Standarddrucker
    GUICtrlCreateLabel("Standarddrucker: ", 20, 60, 120 , 30)
    ;~ $standardprinter = RegRead("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
    ;~ $standardprinter = StringSplit($standardprinter, ",")
    ;~ $standardprinter = $standardprinter[1]
    ; 4.1 StandarddruckerLabel
    $standardprinter = 'Bitte auf Abfragen drücken!'
    $l_standardprinter = GUICtrlCreateLabel($standardprinter, 120, 60, 300)
    
    
    ; 5. Druckerliste
    GUICtrlCreateLabel("Installierte Drucker: ", 20, 90)
    GUISetFont(9)
    $liste = GUICtrlCreateList("", 20, 110, 500, 250)
    
    ; 6. Buttons
    ;~ $tabtestdruck = GUICtrlCreateButton("Testdruck", 375, 110, 100, 20)
    ;~ $tabdruckereinstellung = GUICtrlCreateButton("Einstellungen", 375, 150, 100, 20)
    ;~ $tabdruckereigenschaft = GUICtrlCreateButton("Eigenschaften", 375, 190, 100, 20)
    ;~ $tabdruckerfenster = GUICtrlCreateButton("Warteschlange", 375, 230, 100, 20)
    ;~ $tabdruckerordner = GUICtrlCreateButton("Druckerordner", 375, 270, 100, 20)
    ;~ $tabbeenden = GUICtrlCreateButton("Beenden", 225, 360, 100, 20)
    
    GUISetState(@SW_SHOW, $hGUI)
    
    TrayIcon()
    
    ;~ For $i = 1 To 100
    ;~     $reg = RegEnumVal("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
    ;~     If @error <> 0 Then ExitLoop
    ;~     GUICtrlSetData($liste, $reg, $standardprinter)
    ;~ Next
    
    Local $iMsg = 0
    While 1
        $iMsg = GUIGetMsg()
        Switch $iMsg
            Case $tabAbfragen
                $h = 0
                For $h = $iSavePos To 100
                Next
                Abfragen()
    
    ;~         Case $tabtestdruck
    ;~             Testdruck()
    
    ;~         Case $tabdruckereinstellung
    ;~             DruckerEinstellung()
    
    ;~         Case $tabdruckereigenschaft
    ;~             DruckerEigenschaft()
    
    ;~         Case $tabdruckerfenster
    ;~             DruckerFenster()
    
    ;~         Case $tabdruckerordner
    ;~             druckerordner()
    
    ;~         Case $tabbeenden
    ;~             ExitLoop
    
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    
    WEnd
    
    Func TrayIcon()
        Local $sTrayIcon = TraySetIcon(@ScriptDir & '\DruckerInfo.ico')
        TraySetState($TRAY_ICONSTATE_SHOW)
    EndFunc   ;==>TrayIcon
    
    
    
    Func _GetPrintersInfo($strComputer = ".")
        GUICtrlSetData($l_standardprinter, "Kein Standarddrucker hinterlegt!")
        GUICtrlSetData($idProgressbar1, 0)
        GUICtrlSetData($lStatus, "Abfrage wird ausgeführt")
        GUICtrlSetData($liste, "")
        Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        If Not IsObj($objWMIService) Then Return SetError(1)
        Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", 'WQL', 48)
        For $objItem In $colItems
            ConsoleWrite("-------------------------------------------" & @CRLF)
            ConsoleWrite("Win32_Printer instance from '" & $strComputer & "'" & @CRLF)
            ConsoleWrite("-------------------------------------------" & @CRLF)
    ;~         ConsoleWrite("Attributes                 : " & $objItem.Attributes & @CRLF)
    ;~         ConsoleWrite("Availability               : " & $objItem.Availability & @CRLF)
    ;~         ConsoleWrite("AvailableJobSheets         : " & Join($objItem.AvailableJobSheets, ",") & @CRLF)
    ;~         ConsoleWrite("AveragePagesPerMinute      : " & $objItem.AveragePagesPerMinute & @CRLF)
    ;~         ConsoleWrite("Capabilities               : " & Join($objItem.Capabilities, ",") & @CRLF)
            ConsoleWrite("CapabilityDescriptions     : " & Join($objItem.CapabilityDescriptions, ",") & @CRLF)
            ConsoleWrite("Caption                    : " & $objItem.Caption & @CRLF)
            $reg = ($objItem.Caption & @CRLF)
    ;~         ConsoleWrite("CharSetsSupported          : " & Join($objItem.CharSetsSupported, ",") & @CRLF)
            ConsoleWrite("Comment                    : " & $objItem.Comment & @CRLF)
    ;~         ConsoleWrite("ConfigManagerErrorCode     : " & $objItem.ConfigManagerErrorCode & @CRLF)
    ;~         ConsoleWrite("ConfigManagerUserConfig    : " & $objItem.ConfigManagerUserConfig & @CRLF)
            ConsoleWrite("CreationClassName          : " & $objItem.CreationClassName & @CRLF)
    ;~         ConsoleWrite("CurrentCapabilities        : " & Join($objItem.CurrentCapabilities, ",") & @CRLF)
    ;~         ConsoleWrite("CurrentCharSet             : " & $objItem.CurrentCharSet & @CRLF)
    ;~         ConsoleWrite("CurrentLanguage            : " & $objItem.CurrentLanguage & @CRLF)
    ;~         ConsoleWrite("CurrentMimeType            : " & $objItem.CurrentMimeType & @CRLF)
    ;~         ConsoleWrite("CurrentNaturalLanguage     : " & $objItem.CurrentNaturalLanguage & @CRLF)
    ;~         ConsoleWrite("CurrentPaperType           : " & $objItem.CurrentPaperType & @CRLF)
            ConsoleWrite("Default                    : " & $objItem.Default & @CRLF)
    ;~         MsgBox(0, "", $objItem.Default)
    ;~         ConsoleWrite("DefaultCapabilities        : " & Join($objItem.DefaultCapabilities, ",") & @CRLF)
    ;~         ConsoleWrite("DefaultCopies              : " & $objItem.DefaultCopies & @CRLF)
    ;~         ConsoleWrite("DefaultLanguage            : " & $objItem.DefaultLanguage & @CRLF)
    ;~         ConsoleWrite("DefaultMimeType            : " & $objItem.DefaultMimeType & @CRLF)
    ;~         ConsoleWrite("DefaultNumberUp            : " & $objItem.DefaultNumberUp & @CRLF)
    ;~         ConsoleWrite("DefaultPaperType           : " & $objItem.DefaultPaperType & @CRLF)
    ;~         ConsoleWrite("DefaultPriority            : " & $objItem.DefaultPriority & @CRLF)
            ConsoleWrite("Description                : " & $objItem.Description & @CRLF)
    ;~         ConsoleWrite("DetectedErrorState         : " & $objItem.DetectedErrorState & @CRLF)
            ConsoleWrite("DeviceID                   : " & $objItem.DeviceID & @CRLF)
    ;~         ConsoleWrite("Direct                     : " & $objItem.Direct & @CRLF)
    ;~         ConsoleWrite("DoCompleteFirst            : " & $objItem.DoCompleteFirst & @CRLF)
            ConsoleWrite("DriverName                 : " & $objItem.DriverName & @CRLF)
    ;~         ConsoleWrite("EnableBIDI                 : " & $objItem.EnableBIDI & @CRLF)
    ;~         ConsoleWrite("EnableDevQueryPrint        : " & $objItem.EnableDevQueryPrint & @CRLF)
    ;~         ConsoleWrite("ErrorCleared               : " & $objItem.ErrorCleared & @CRLF)
    ;~         ConsoleWrite("ErrorDescription           : " & $objItem.ErrorDescription & @CRLF)
    ;~         ConsoleWrite("ErrorInformation           : " & Join($objItem.ErrorInformation, ",") & @CRLF)
    ;~         ConsoleWrite("ExtendedDetectedErrorState : " & $objItem.ExtendedDetectedErrorState & @CRLF)
    ;~         ConsoleWrite("ExtendedPrinterStatus      : " & $objItem.ExtendedPrinterStatus & @CRLF)
    ;~         ConsoleWrite("Hidden                     : " & $objItem.Hidden & @CRLF)
    ;~         ConsoleWrite("HorizontalResolution       : " & $objItem.HorizontalResolution & @CRLF)
    ;~         ConsoleWrite("InstallDate                : " & $objItem.InstallDate & @CRLF)
    ;~         ConsoleWrite("JobCountSinceLastReset     : " & $objItem.JobCountSinceLastReset & @CRLF)
    ;~         ConsoleWrite("KeepPrintedJobs            : " & $objItem.KeepPrintedJobs & @CRLF)
    ;~         ConsoleWrite("LanguagesSupported         : " & Join($objItem.LanguagesSupported, ",") & @CRLF)
    ;~         ConsoleWrite("LastErrorCode              : " & $objItem.LastErrorCode & @CRLF)
            ConsoleWrite("Local                      : " & $objItem.Local & @CRLF)
    ;~         ConsoleWrite("Location                   : " & $objItem.Location & @CRLF)
    ;~         ConsoleWrite("MarkingTechnology          : " & $objItem.MarkingTechnology & @CRLF)
    ;~         ConsoleWrite("MaxCopies                  : " & $objItem.MaxCopies & @CRLF)
    ;~         ConsoleWrite("MaxNumberUp                : " & $objItem.MaxNumberUp & @CRLF)
    ;~         ConsoleWrite("MaxSizeSupported           : " & $objItem.MaxSizeSupported & @CRLF)
    ;~         ConsoleWrite("MimeTypesSupported         : " & Join($objItem.MimeTypesSupported, ",") & @CRLF)
            ConsoleWrite("Name                       : " & $objItem.Name & @CRLF)
    ;~         ConsoleWrite("NaturalLanguagesSupported  : " & Join($objItem.NaturalLanguagesSupported, ",") & @CRLF)
            ConsoleWrite("Network                    : " & $objItem.Network & @CRLF)
    ;~         ConsoleWrite("PaperSizesSupported        : " & Join($objItem.PaperSizesSupported, ",") & @CRLF)
    ;~         ConsoleWrite("PaperTypesAvailable        : " & Join($objItem.PaperTypesAvailable, ",") & @CRLF)
    ;~         ConsoleWrite("Parameters                 : " & $objItem.Parameters & @CRLF)
    ;~         ConsoleWrite("PNPDeviceID                : " & $objItem.PNPDeviceID & @CRLF)
            ConsoleWrite("PortName                   : " & $objItem.PortName & @CRLF)
    ;~         ConsoleWrite("PowerManagementCapabilities: " & Join($objItem.PowerManagementCapabilities, ",") & @CRLF)
    ;~         ConsoleWrite("PowerManagementSupported   : " & $objItem.PowerManagementSupported & @CRLF)
    ;~         ConsoleWrite("PrinterPaperNames          : " & _WideCharToMultiByte(Join($objItem.PrinterPaperNames, ",")) & @CRLF)
    ;~         ConsoleWrite("PrinterState               : " & $objItem.PrinterState & @CRLF)
    ;~         ConsoleWrite("PrinterStatus              : " & $objItem.PrinterStatus & @CRLF)
    ;~         ConsoleWrite("PrintJobDataType           : " & $objItem.PrintJobDataType & @CRLF)
    ;~         ConsoleWrite("PrintProcessor             : " & $objItem.PrintProcessor & @CRLF)
    ;~         ConsoleWrite("Priority                   : " & $objItem.Priority & @CRLF)
    ;~         ConsoleWrite("Published                  : " & $objItem.Published & @CRLF)
    ;~         ConsoleWrite("Queued                     : " & $objItem.Queued & @CRLF)
    ;~         ConsoleWrite("RawOnly                    : " & $objItem.RawOnly & @CRLF)
    ;~         ConsoleWrite("SeparatorFile              : " & $objItem.SeparatorFile & @CRLF)
    ;~         ConsoleWrite("ServerName                 : " & $objItem.ServerName & @CRLF)
    ;~         ConsoleWrite("Shared                     : " & $objItem.Shared & @CRLF)
    ;~         ConsoleWrite("ShareName                  : " & $objItem.ShareName & @CRLF)
    ;~         ConsoleWrite("SpoolEnabled               : " & $objItem.SpoolEnabled & @CRLF)
    ;~         ConsoleWrite("StartTime                  : " & $objItem.StartTime & @CRLF)
    ;~         ConsoleWrite("Status                     : " & $objItem.Status & @CRLF)
    ;~         ConsoleWrite("StatusInfo                 : " & $objItem.StatusInfo & @CRLF)
    ;~         ConsoleWrite("SystemCreationClassName    : " & $objItem.SystemCreationClassName & @CRLF)
            ConsoleWrite("SystemName                 : " & $objItem.SystemName & @CRLF)
    ;~         ConsoleWrite("TimeOfLastReset            : " & $objItem.TimeOfLastReset & @CRLF)
    ;~         ConsoleWrite("UntilTime                  : " & $objItem.UntilTime & @CRLF)
    ;~         ConsoleWrite("VerticalResolution         : " & $objItem.VerticalResolution & @CRLF)
    ;~         ConsoleWrite("WorkOffline                : " & $objItem.WorkOffline & @CRLF & @CRLF)
    if $objItem.Default = True Then
                GUICtrlSetData($l_standardprinter, $objItem.Caption)
            EndIf
    GUICtrlSetData($liste, $reg, $l_standardprinter)
        Next
        GUICtrlSetData($idProgressbar1, $h)
        GUICtrlSetData($lStatus, "Fertig!")
        Sleep(250)
    EndFunc  ;==>_GetPrintersInfo
    
    
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc   ;==>druckerordner
    
    Func Testdruck()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "TestDruck", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring == 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc   ;==>Testdruck
    
    Func DruckerFenster()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /o")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o")
        EndIf
    EndFunc   ;==>DruckerFenster
    
    Func DruckerEigenschaft()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /p")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p")
        EndIf
    EndFunc   ;==>DruckerEigenschaft
    
    Func DruckerEinstellung()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /e")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e")
        EndIf
    EndFunc   ;==>DruckerEinstellung
    
    Func Abfragen()
        _GetPrintersInfo(GUICtrlRead($sComputer))
    EndFunc   ;==>Abfragen
    
    Func CLOSEClicked()
        Exit
    EndFunc   ;==>CLOSEClicked
    
    Func Beenden()
        Exit
    EndFunc   ;==>Beenden
    
    Func Join($aArray, $sDelimiter)
        Local $sJoin
        If IsArray($aArray) Then
            For $sItem In $aArray
                $sJoin &= $sItem & $sDelimiter
            Next
        EndIf
        Return $sJoin ? StringTrimRight($sJoin, 1) : ''
    EndFunc  ;==>Join
    ; Konvertiert den Text, damit Umlaute und Sonderzeichen in SciTE und in der Eingabeaufforderung korrekt dargestellt werden!
    
    Func _WideCharToMultiByte($vText, $iCodePage = @Compiled ? 1 : 65001, $bRetNoStruct = True, $bRetBinary = False)
        $vText = String($vText) ; Damit _WinAPI_WideCharToMultiByte nicht abstürzt, wenn kein String übergeben wurde!
        Return _WinAPI_WideCharToMultiByte($vText, $iCodePage, $bRetNoStruct)
    EndFunc  ;==>_WideCharToMultiByte
    
    GUIDelete($hGUI)
    Alles anzeigen

    Habe mich allerdings noch dazu entschlossen die Funktionen für die Druckeinstellungen etc. vorerst auszukommentieren.

    Wenn ich hierfür mal wieder mehr Zeit habe, werde ich mich da nochmal ransetzen.

  • Umbenannt: Installierte Drucker Remote auslesen

    • Lashandan
    • 18. März 2019 um 23:29

    Hey Concara ,

    ich werde morgen ebenfalls mal den HKEY_USER Zweig testen.

    Und du liegst völlig richtig in deiner Annahme.

    Ich arbeite in einem Unternehmen mit über 500 Rechnern - und wir verwenden für die Rechner eine AD-Domain.

    Für die meisten Drucker haben wir einen Printserver, dennoch haben wir auch einen beachtlichen Teil an Druckern die lokal per USB angeschlossen sind.

    Die Adminrechte habe ich ausnahmslos.

    Ich möchte ganz simpel folgendes erreichen;

    - Rechnernamen eingeben und den installierten Standarddrucker angezeigt bekommen, weiterhin natürlich auch alle anderen Drucker die für den jeweiligen Rechner installiert sind.

    - viele Rechner haben die klassischen PDF-Printer und einen Hauptdrucker der über den Printserver kommt - dieser ist auch gleichzeitig der Standarddrucker

    - Wir haben aber auch viele Rechner die an mehreren Orten in unserem Unternehmen drucken müssen

    - je granularer und genauer das Skript arbeitet, desto besser

    Ich möchte nichtmal zwingend die Einstellungen der Drucker ändern.

    In der Praxis reicht es mir, angezeigt zu bekommen an welchem Rechner welche Drucker installiert sind.

    Einstellungen, Testseiten drucken usw. ist nur ein kleiner Bonus für den Anwender.

    Die GPOs werden bei uns vom Mutterkonzern vorgegeben und darauf habe ich nur bedingten Einfluss.

    Ich werde morgen nochmal ein bisschen testen.

    Freue mich von dir zu lesen und warte gespant auf dein Skript für die ID zum jeweiligen User ;)

    Bis dahin erstmal,

    gute Nacht :sleeping:

  • Umbenannt: Installierte Drucker Remote auslesen

    • Lashandan
    • 18. März 2019 um 15:34

    Vielen Dank an der Stelle für eure Hilfe.

    Habe hier mal den aktuellen Code der soweit auch ganz gut funktioniert wie ich mir das vorgestellt habe:

    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=DruckerInfo.ico
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <TrayConstants.au3>
    #pragma compile(Icon, DruckerInfo.ico)
    Local $computer = @ComputerName
    
    ; 1. GUI Fenstername
    Local $hGUI = GUICreate("DruckerInfo", 550, 400)
    GUISetFont(9)
    Local $sFile = @ScriptDir & "\DruckerInfo.ico"
    GUISetIcon($sFile)
    
    ; 2. Rechnername
    GUICtrlCreateLabel("Rechnername: ", 20, 12.5, 100, 20)
    ; 2.1 RechnernameInputBox
    $sComputer = GUICtrlCreateInput($computer, 105, 10, 100, 20, BitOR(0x0004, 0x1000, 0x0008))
    $vDLL = 'user32.dll'
    ; 2.2. RechnernameAbfrageButton
    $tabAbfragen = GUICtrlCreateButton("Abfragen", 205, 10, 100, 20)
    
    GUICtrlCreateLabel("Status: ", 310, 12.5, 50, 20)
    $status = "Fertig!"
    $lStatus = GUICtrlCreateLabel($status, 350, 12.5, 250, 20)
    
    Global $idProgressbar1 = GUICtrlCreateProgress(310, 30, 239, 20, $PBS_Smooth)
    GUICtrlSetColor(-1, 32250)
    $iWait = 20
    $iSavePos = 0
    
    ; 3. Trennlinie
    GUICtrlCreateGraphic(0, 50, 550, 1, $SS_BLACKFRAME)
    
    ; 4. Standarddrucker
    GUICtrlCreateLabel("Standarddrucker: ", 20, 60)
    $standardprinter = RegRead("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
    $standardprinter = StringSplit($standardprinter, ",")
    $standardprinter = $standardprinter[1]
    ; 4.1 StandarddruckerLabel
    $l_standardprinter = GUICtrlCreateLabel($standardprinter, 120, 60, 300)
    
    ; 5. Druckerliste
    GUICtrlCreateLabel("Installierte Drucker: ", 20, 90)
    GUISetFont(9)
    $liste = GUICtrlCreateList("", 20, 110, 350, 250)
    
    ; 6. Buttons
    $tabtestdruck = GUICtrlCreateButton("Testdruck", 375, 110, 100, 20)
    $tabdruckereinstellung = GUICtrlCreateButton("Einstellungen", 375, 150, 100, 20)
    $tabdruckereigenschaft = GUICtrlCreateButton("Eigenschaften", 375, 190, 100, 20)
    $tabdruckerfenster = GUICtrlCreateButton("Warteschlange", 375, 230, 100, 20)
    $tabdruckerordner = GUICtrlCreateButton("Druckerordner", 375, 270, 100, 20)
    $tabbeenden = GUICtrlCreateButton("Beenden", 225, 360, 100, 20)
    
    GUISetState(@SW_SHOW, $hGUI)
    
    TrayIcon()
    
    For $i = 1 To 100
        $reg = RegEnumVal("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
        If @error <> 0 Then ExitLoop
        GUICtrlSetData($liste, $reg, $standardprinter)
    Next
    
    Local $iMsg = 0
    While 1
        $iMsg = GUIGetMsg()
        Switch $iMsg
            Case $tabAbfragen
                $h = 0
                For $h = $iSavePos To 100
                Next
                Abfragen()
    
            Case $tabtestdruck
                Testdruck()
    
            Case $tabdruckereinstellung
                DruckerEinstellung()
    
            Case $tabdruckereigenschaft
                DruckerEigenschaft()
    
            Case $tabdruckerfenster
                DruckerFenster()
    
            Case $tabdruckerordner
                druckerordner()
    
            Case $tabbeenden
                ExitLoop
    
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    
    WEnd
    
    Func TrayIcon()
        Local $sTrayIcon = TraySetIcon(@ScriptDir & '\DruckerInfo.ico')
        TraySetState($TRAY_ICONSTATE_SHOW)
    EndFunc   ;==>TrayIcon
    
    
    
    Func printerInfo()
        GUICtrlSetData($idProgressbar1, 0)
        GUICtrlSetData($lStatus, "Abfrage wird ausgeführt")
        ;MsgBox(0, "", GUICtrlRead($sComputer))
        If RunWait("ping.exe -n 1 " & GUICtrlRead($sComputer), "", @SW_HIDE) == 0 Then
        Else
            MsgBox(0, "Fehler", "Rechner nicht erreichbar" & @CRLF & "Rechnername falsch", 1)
        EndIf
        GUICtrlSetData($liste, "")
        $standardprinter = RegRead("\\" & GUICtrlRead($sComputer) & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        $standardprinter = StringSplit($standardprinter, ",")
        $standardprinter = $standardprinter[1]
        GUICtrlSetData($l_standardprinter, $standardprinter)
        For $i = 1 To 100
            $reg = RegEnumVal("\\" & GUICtrlRead($sComputer) & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
            If @error <> 0 Then ExitLoop
            GUICtrlSetData($liste, $reg, $standardprinter)
        Next
        Sleep(250)
        GUICtrlSetData($lStatus, "Fertig!")
        GUICtrlSetData($idProgressbar1, $h)
    
    EndFunc   ;==>printerInfo
    
    
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc   ;==>druckerordner
    
    Func Testdruck()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "TestDruck", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring == 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc   ;==>Testdruck
    
    Func DruckerFenster()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /o")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o")
        EndIf
    EndFunc   ;==>DruckerFenster
    
    Func DruckerEigenschaft()
        $drucker = GUICtrlRead($liste)
    ;~     MsgBox(0, "", GUICtrlRead($liste))
    ;~     MsgBox(0, "", $standardprinter[$i])
    ;~     MsgBox(0, "", GUICtrlRead($scomputer))
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /p")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p")
        EndIf
    EndFunc   ;==>DruckerEigenschaft
    
    Func DruckerEinstellung()
        $drucker = GUICtrlRead($liste)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /e")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e")
        EndIf
    EndFunc   ;==>DruckerEinstellung
    
    Func Abfragen()
        printerInfo()
    EndFunc   ;==>Abfragen
    
    Func CLOSEClicked()
        Exit
    EndFunc   ;==>CLOSEClicked
    
    Func Beenden()
        Exit
    EndFunc   ;==>Beenden
    
    GUIDelete($hGUI)
    Alles anzeigen

    Concara hast du eine Idee wie ich das Problem mit dem Auslesen der installierten Drucker per remote löse?

    Habe schon verschiedene Pfade gefunden aber diese liefern mir leider nicht die selben Informationen:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3

    Oder gibt es noch eine ganz andere Möglichkeit die installierten Drucker auszulesen?

  • Umbenannt: Installierte Drucker Remote auslesen

    • Lashandan
    • 15. März 2019 um 11:09
    Zitat von Tuxedo

    Ich kann es dir nicht genau sagen was falsch läuft, aber dein Fehler liegt in der For Next Schleife

    der Funktion Printerinfo.

    Bist du sicher daß du nur auf @error -1 prüfen willst. Ersetze das mal versuchsweise durch If @error <> 0

    Hi Tuxedo,

    vielen Dank für deine Antwort.

    habe es versuchsweise mal von @error = -1 auf @error <> 0 gesetzt - das Ergebnis bleibt aber unverändert.

    Was ich allerdings mal geändert habe ist folgendes:

    Ich übergebe der Funktion printerInfo() jetzt die Variable $sComputer und erhalte dann auch ein korrektes Ergebnis mit dem Wert aus der InputBox.

    Wenn ich dann den Wert der Variablen in der InputBox ändere und erneut abfrage, erhalte ich auch neue Daten, die ebenfalls korrekt sind.

    Wenn ich dann aber in die Liste klicke, werden mir wieder die alten Werte angezeigt.

    Also habe ich noch irgendeinen Fehler in der GUI das er sich den aktuellen Status nicht sauber zieht.

    Hier mal der abgeänderte Code:

    Code
    #include <GUIConstants.au3>
    #NoTrayIcon
    
    Opt("GUIOnEventMode", 1)
    
    ; GUI
    $mainwindow = GUICreate("ServiceInfo", 550, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetFont (9)
    
    $tab3=GUICtrlCreateTab (-1, -1, 533, 350)
    $tab3a=GUICtrlCreateTabitem ("Drucker")
    
    local $sComputer
    Global $computer = "WDEST1001"
    
    $sComputer = GUICtrlCreateInput($computer, 20, 25, 200, 30)
    $tabAbfragen=GUICtrlCreateButton ("Abfragen", 220, 25, 100, 30)
    GUICtrlSetOnEvent($tabAbfragen, "Abfragen")
    ;MsgBox(0, "", GUICtrlRead($sComputer))
    
    
    func printerInfo($sComputer)
    
    
    $standardprinter = RegRead("\\" & GUICtrlRead($sComputer) & "\" &  "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
    $standardprinter = StringSplit($standardprinter, ",")
    $standardprinter = $standardprinter[1]
    
    GUICtrlCreateLabel ( "Standarddrucker: ", 20, 60 )
    GUICtrlCreateLabel ( $standardprinter, 220, 60 )
    GUICtrlCreateLabel ( "Installierte Drucker: ", 20, 100 )
    GUISetFont (9)
    GUICtrlCreateList("", 20, 120, 350, 200)
    
    For $i = 1 To 1000
        $reg = RegEnumVal("\\" & GUICtrlRead($sComputer) & "\" &  "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
        ;If @error = -1 Then ExitLoop
        If @error <> 0 Then ExitLoop ;Testweise von = -1 auf <> 0 geändert. Hinweis von --> Tuxedo@autoit.de <---
        GUICtrlSetData(-1, $reg, $standardprinter)
    Next
    
    $tabtestdruck=GUICtrlCreateButton ("Testdruck", 400, 90, 100, 30)
    GUICtrlSetOnEvent($tabtestdruck, "Testdruck")
    $tabdruckereinstellung=GUICtrlCreateButton ("Einstellungen", 400, 140, 100, 30)
    GUICtrlSetOnEvent($tabdruckereinstellung, "Druckereinstellung")
    $tabdruckereigenschaft=GUICtrlCreateButton ("Eigenschaften", 400, 190, 100, 30)
    GUICtrlSetOnEvent($tabdruckereigenschaft, "DruckerEigenschaft")
    $tabdruckerfenster=GUICtrlCreateButton ("Warteschlange", 400, 240, 100, 30)
    GUICtrlSetOnEvent($tabdruckerfenster, "DruckerFenster")
    $tabdruckerordner=GUICtrlCreateButton ("Druckerordner", 400, 290, 100, 30)
    GUICtrlSetOnEvent($tabdruckerordner, "druckerordner")
    $tabbeenden=GUICtrlCreateButton ("Beenden", 164,360, 100, 30)
    GUICtrlSetOnEvent($tabbeenden, "Beenden")
    
    
    
    $sComputer = ''
    $standardprinter = ''
    EndFunc
    
    GUISetState(@SW_SHOW)
    
    
    While 1
        Sleep(500)
    WEnd
    
    
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    Func Testdruck()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"TestDruck", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring == 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /k" )
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k" )
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc
    
    Func DruckerFenster()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /o" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o" )
        EndIf
    EndFunc
    
    Func DruckerEigenschaft()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /p" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p" )
        EndIf
    EndFunc
    
    Func DruckerEinstellung()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /e" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e" )
        EndIf
    EndFunc
    
    
    
    Func Abfragen()
        ;MsgBox(0, "", GUICtrlRead($sComputer))
        printerInfo($sComputer)
    EndFunc
    
    
    Func CLOSEClicked()
      Exit
    EndFunc
    
    Func Beenden ()
      Exit
    EndFunc
    Alles anzeigen
  • Umbenannt: Installierte Drucker Remote auslesen

    • Lashandan
    • 15. März 2019 um 09:42

    Hallo liebe AutoITer,

    ich habe folgendes Problem:

    Innerhalb eines GUI verwende ich eine InputBox. In diese kann/soll der Anwender einen bestimmten Wert eingeben der dann an weitere Funktionen übergeben werden und dann damit weiter gearbeitet werden soll.

    Natürlich soll der Anwender ohne die Anwendung zu schließen und wieder zu öffnen, den Wert verändern können und mehrere Abfragen nacheinander durchführen können.

    Aktuell klappt das ganze leider nur einmal.

    Ändere ich den Wert in der Inputbox und führe die Abfrage erneut aus, wird die Variable nicht verändert weitergegeben.

    Wie gehe ich das am Besten an?

    Hier mal der derzeitige Code:

    Code
    #include <GUIConstants.au3>
    #NoTrayIcon
    
    Opt("GUIOnEventMode", 1)
    
    ; GUI
    $mainwindow = GUICreate("ServiceInfo", 550, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetFont (9)
    
    $tab3=GUICtrlCreateTab (-1, -1, 533, 350)
    $tab3a=GUICtrlCreateTabitem ("Drucker")
    
    local $sComputer
    Global $computer = "WDEST"
    
    $sComputer = GUICtrlCreateInput($computer, 20, 25, 200, 30)
    $tabAbfragen=GUICtrlCreateButton ("Abfragen", 220, 25, 100, 30)
    GUICtrlSetOnEvent($tabAbfragen, "Abfragen")
    ;MsgBox(0, "", GUICtrlRead($sComputer))
    
    func printerInfo()
    
    $standardprinter = RegRead("\\" & GUICtrlRead($sComputer) & "\" &  "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
    $standardprinter = StringSplit($standardprinter, ",")
    $standardprinter = $standardprinter[1]
    
    GUICtrlCreateLabel ( "Standarddrucker: ", 20, 60 )
    GUICtrlCreateLabel ( $standardprinter, 220, 60 )
    GUICtrlCreateLabel ( "Installierte Drucker: ", 20, 100 )
    GUISetFont (9)
    GUICtrlCreateList("", 20, 120, 350, 200)
    For $i = 1 To 1000
        $reg = RegEnumVal("\\" & GUICtrlRead($sComputer) & "\" &  "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
        If @error = -1 Then ExitLoop
        GUICtrlSetData(-1, $reg, $standardprinter)
    Next
    $tabtestdruck=GUICtrlCreateButton ("Testdruck", 400, 90, 100, 30)
    GUICtrlSetOnEvent($tabtestdruck, "Testdruck")
    $tabdruckereinstellung=GUICtrlCreateButton ("Einstellungen", 400, 140, 100, 30)
    GUICtrlSetOnEvent($tabdruckereinstellung, "Druckereinstellung")
    $tabdruckereigenschaft=GUICtrlCreateButton ("Eigenschaften", 400, 190, 100, 30)
    GUICtrlSetOnEvent($tabdruckereigenschaft, "DruckerEigenschaft")
    $tabdruckerfenster=GUICtrlCreateButton ("Warteschlange", 400, 240, 100, 30)
    GUICtrlSetOnEvent($tabdruckerfenster, "DruckerFenster")
    $tabdruckerordner=GUICtrlCreateButton ("Druckerordner", 400, 290, 100, 30)
    GUICtrlSetOnEvent($tabdruckerordner, "druckerordner")
    $tabbeenden=GUICtrlCreateButton ("Beenden", 164,360, 100, 30)
    GUICtrlSetOnEvent($tabbeenden, "Beenden")
    
    EndFunc
    
    GUISetState(@SW_SHOW)
    
    
    While 1
        Sleep(500)
    WEnd
    
    
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    Func Testdruck()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"TestDruck", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring == 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /k" )
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k" )
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc
    
    Func DruckerFenster()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /o" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o" )
        EndIf
    EndFunc
    
    Func DruckerEigenschaft()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /p" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p" )
        EndIf
    EndFunc
    
    Func DruckerEinstellung()
        $drucker=GUICtrlRead ( 8 )
        $instring = StringInStr ( $drucker, "\\")
        If $drucker == "" Then
            MsgBox(16,"Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /e" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e" )
        EndIf
    EndFunc
    
    
    
    Func Abfragen()
        ;MsgBox(0, "", GUICtrlRead($sComputer))
        printerInfo()
    EndFunc
    
    
    Func CLOSEClicked()
      Exit
    EndFunc
    
    Func Beenden ()
      Exit
    EndFunc
    Alles anzeigen

    Ich hoffe wie immer auf eure Unterstützung.

  • 2d Array mit fixer variable füllen

    • Lashandan
    • 9. Januar 2019 um 10:53

    Aber der Hinweis mit dem Ubound war perfekt!!!

    Habe nun alles was ich brauche ;)

    Vielen Dank.

    Hier der neue Code:

    C
    #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
    #include <AD.au3>
    #include <Array.au3>
    
    
    
    Global $UserList = @ScriptDir & "\UserList.txt"
    Global $userName = FileReadToArray($UserList)
    
    ;AD Einstellungen
    Global $aProperties[1][2]
    
    CheckAD()
    
    Func CheckAD()
    ;Ausgabeverzeichnis und File
    Local $sLogFileAD = @ScriptDir & "\" & "_LogFileAD.txt"
    Local $hOpenLFileAD = FileOpen($sLogFileAD, 2)
    
    For $i = 0    to UBound($userName) - 1
    ;MsgBox(0, "", $userName[$i])
    _AD_Open()
    $aProperties = _AD_GetObjectProperties($userName[$i], "msRADIUSFramedIPAddress")
    
    
    if Ubound($aProperties, $UBOUND_ROWS) <= "1" Then
        FileWriteLine($hOpenLFileAD, $userName[$i] & ";" & "keine IP-Adresse")
    Else
        FileWriteLine($hOpenLFileAD, $userName[$i] & ";" & $aProperties[1][1])
    EndIf
    
    Next
    
    FileClose($hOpenLFileAD)
    _AD_Close()
    MsgBox(0, "Fertig", "Fertig")
    
    EndFunc
    Alles anzeigen
  • 2d Array mit fixer variable füllen

    • Lashandan
    • 9. Januar 2019 um 09:55

    Die Funktion _AD_GetObjectProperties sieht wie folgt aus:

    _AD_GetObjectProperties

    _AD_GetObjectProperties($vObject = @UserName, $sProperties = "", $bSort = True)
    Description: Returns a two-dimensional array of all or selected properties and their values of an object in readable form.

    Return Value:

    Success - Returns a one based two-dimensional array with all properties and their values of an object in readable form

    Failure - "" or property name, sets @error to:

    1 - $vObject could not be found

    2 - No values for the specified property. The name of the property in error is returned as the function result

    3 - Error retrieving $vObject. @Extended is set to the error returned by LDAP

    Parameters:

    $vObject - Optional: SamAccountName, FQDN or ADSPath of the object to retrieve properties from (e.g. computer, user, group ...) (default = @Username)

    Can be of type object as well. Useful to get properties for a schema or configuration object (see _AD_ListRootDSEAttributes)

    $sProperties - Optional: Comma separated list of properties to return (default = "" = return all properties)

    $bSort - Optional: True specifies that the array will be sorted on property name (default = True)

    Remarks: Dates are returned in format: YYYY/MM/DD HH:MM:SS local time of the calling user (AD stores all dates in UTC - Universal Time Coordinated)

    Exception: AD internal dates like "whenCreated", "whenChanged" and "dSCorePropagationData". They are returned as UTC

    NT Security Descriptors are returned as: Control:nn, Group:Domain\Group, Owner:Domain\Group, Revision:nn

    No error is returned if there are properties in $sProperties that are not available for the selected object ;+

    Properties are returned in alphabetical order. If $sProperties is set to "samaccountname,displayname" the returned array will contain

    displayname as the first and samaccountname as the second row.

    Author: Sundance

    Modified: water

  • 2d Array mit fixer variable füllen

    • Lashandan
    • 8. Januar 2019 um 17:04

    Hi Autoit-Fans,

    ich stehe mal wieder vor einem Problem:

    Mittels unten stehender Funktion möchte ich gern aus dem ActiveDirectory Werte auslesen sofern vorhanden.

    Leider bricht die Funktion ab, sofern das Array keinen Wert enthält.

    Gibt es eine Möglichkeit in der zweiten Dimension den Wert des Arrays, sofern nicht vorhanden zu füllen?

    Habe es versucht über if $aProperties[1][1] > "1" then zu lösen - aber AutoIt meckert bereits "Array variable has incorrect number of subscripts or subscript dimension range exceeded."

    C
    #include <AD.au3>
    #include <Array.au3>
    
    
    
    Global $UserList = @ScriptDir & "\UserList.txt"
    Global $userName = FileReadToArray($UserList)
    
    ;AD Einstellungen
    Global $aProperties[1][2]
    
    CheckAD()
    
    Func CheckAD()
    ;Ausgabeverzeichnis und File
    Local $sLogFileAD = @ScriptDir & "\" & "_LogFileAD.txt"
    Local $hOpenLFileAD = FileOpen($sLogFileAD, 2)
    
    For $i = 0    to UBound($userName) - 1
    MsgBox(0, "", $userName[$i])
    _AD_Open()
    $aProperties = _AD_GetObjectProperties($userName[$i], "msRADIUSFramedIPAddress")
    
    MsgBox(0, "", $aProperties[1][1])
    
    if $aProperties[1][1] > "1" Then
        FileWriteLine($hOpenLFileAD, $userName[$i] & ";" & "keine IP-Adresse")
    Else
        FileWriteLine($hOpenLFileAD, $userName[$i] & ";" & $aProperties[1][1])
    EndIf
    
    Next
    
    FileClose($hOpenLFileAD)
    _AD_Close()
    
    EndFunc
    Alles anzeigen

    Es wird also vorkommen, dass es Nutzer gibt, die Einträge bei "msRADIUSFramdedIPAdress" haben und bei manchen nicht.

    Ich möchte einfach alle Nutzer in einer *.txt-Datei nacheinander abfragen und dann in einem Export ausgeben ob sie einen Eintrag haben oder nicht.

    Hoffe auf eure Unterstützung. :thumbup:

  • Schreiben/Lesen eines Array-Wertes aus einer Datei

    • Lashandan
    • 24. September 2018 um 09:52

    Verdammt war das dann doch einfach :rock:

    AutoIt
    Func Example()
        Local Const $sFilePath = @ScriptDir & "\" & "config.ini"
    
        ;Auslesen des Wertes "Klicks"
        Local $k = IniRead($sFilePath, "Statistik", "Klicks", "0")
        ;Hochzählen des Wertes
        $k = $k +1
        ;Local $aSection[2][2] = [[2, ""], ["Klicks", $k]]
        ;Schreiben des neuen Wertes
        IniWrite($sFilePath, "Statistik", "Klicks", $k)
    
        MsgBox(64, "Hinweis", "Klicks " & $k)
    EndFunc   ;==>Example
    Alles anzeigen

    Und für alle weiteren "Sections" kann man ja einfach den Wert "Klicks" ändern und kann mehrere Einträge in der Ini speichern. :thumbup:
    Danke euch für das befreien meiner Barriere :klatschen:

  • Schreiben/Lesen eines Array-Wertes aus einer Datei

    • Lashandan
    • 20. September 2018 um 11:00

    Es sollen mehrere Funktionen gezählt und geschrieben werden und daher dachte ich, dass IniWriteSection die richtige Funktion dafür ist.

  • Schreiben/Lesen eines Array-Wertes aus einer Datei

    • Lashandan
    • 20. September 2018 um 10:25

    Hallo an alle AutoIter,

    ich habe einen relativ einfachen Fall (dachte ich) aber ich komme einfach nicht weiter.

    Ich möchte eine Funktion ausführen und sobald diese Funktion gelaufen ist, soll ein Zählwert in eine Variable geschrieben werden und diese soll dann als "Statistik" in eine INI Datei (oder gern auch csv, txt) geschrieben werden.

    Weiterhin soll der geschriebene Wert nach Beendigung des Programms gespeichert werden und beim nächsten Ausführen des Programms/der Funktion ausgelesen werden und weiter hochgezählt werden.

    Hatte mir das mit 2D-Arrays vorgestellt aber ich komme nicht zum Ziel.

    Habe mich an dem Beispiel aus der Hilfe bedient und nutze die Funktion IniWriteSection.

    Hier mal mein Codeschnipsel dazu:

    AutoIt
    #include <MsgBoxConstants.au3>
    #include <WinAPIFiles.au3>
    
    Example()
    
    Func Example()
        Local Const $sFilePath = @ScriptDir & "\" & "config.ini"
    
        ;Auslesen des Wertes "Klicks"
        Local $k = IniReadSection($sFilePath, "Klicks")
        ;Hochzählen des Wertes
        $k = $k +1
        Local $aSection[2][2] = [[2, ""], ["Klicks", $k]]
        ;Schreiben des neuen Wertes
        IniWriteSection('config.ini', "Statistik", $aSection & $k)
    
        ;Auslesen des Arrays
        Local $aArray = IniReadSection($sFilePath, "Statistik")
    
        ; Check if an error occurred.
        If Not @error Then
            For $i = 1 To $aArray[0][0]
                ;Wiedergabe der Werte
                MsgBox($MB_SYSTEMMODAL, "", "Value: " & $aArray[$i][1])
            Next
        EndIf
    
    EndFunc   ;==>Example
    Alles anzeigen

    Ich bin mir sicher, dass ich nur ein Brett vor dem Kopf habe und ihr mir helfen könnt ;)

  • Softwareinventarisierung

    • Lashandan
    • 30. Juli 2018 um 09:19

    Guten Morgen an alle,

    vielen Dank erstmal für die vielen Vorschläge und Hinweise.

    Bevor ich allerdings die PSTools teste, würde ich vorerst eine Funktion bauen, die remote die Uninstallinformationen aus der Registry ausließt und diese dann zurückgibt, wie DigitalKarl schrieb.

    autoiter die Funktion auszulagern, habe ich auch getestet. Leider bringt das keine erhöhte Performance. Die Abfrage von über 200 Rechnern dauert einfach brutal lang.

    PSTools schmeißt bei mir ebenfalls doppelte Einträge aus.

    Aber wie ihr bereits geschrieben habt, entsorgt sich die Dopplung ja ziemlich simpel.

    Ich bastel jetzt mal noch an der Funktion mittels 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' und werde mich hier wieder melden ;)

    Oscar danke für deine Funktion, ich werde sie versuchen so umzubauen, dass ich sie nicht auf jedem Client installieren muss.

    Als Admin habe ich maximale Rechte und kann jede Registry auch remote auslesen.

  • Softwareinventarisierung

    • Lashandan
    • 27. Juli 2018 um 08:54
    Zitat von autoiter

    Hallo Lashandan

    In Beitrag 5 sieht man ja, dass es auch mal fast 5 Minuten dauert, bevor ein Rechner abgefragt ist. Diese enormen Schwankungen könntest du mal untersuchen. Das erklärt sich doch nicht mit enorm viel Software, die aufzulisten wäre, oder?

    An deiner Stelle würde ich mal testen, die Funktion Softwarelist in eine eigene Anwendung zu packen. Die Funktion sollte dann auch keine Schleife abarbeiten, sondern immer einen Rechner abfragen (IP kannst du ja per Startparameter mitgeben). Aus deinem Hauptskript rufst du dann immer wieder diese Anwendung auf. Vielleicht wartest du dann blockweise etwas ab und startest dann die Auflistung eines neuen Blocks (einfach damit die Anwendung nicht 130 mal läuft). Um den Arbeitsstatus im Hauptskript zu prüfen, musst du dir noch eine Kommunikation überlegen.

    Moin autoiter

    kannst du mir deinen Vorschlag noch etwas genauer beschreiben wie ich vorgehen muss?
    Habe noch nie eine Anwendung ausgelagert. Läuft das ganze dann mit includes?

  • Softwareinventarisierung

    • Lashandan
    • 26. Juli 2018 um 09:47

    <push>

    Hat noch jemand von euch Ideen zur Optimierung der Performance, ganz speziell in der Funktion der Softwareliste?!

    Das Abfragen der installierten Betriebssysteme ist innerhalb weniger Minuten erledigt und kein Problem.
    Nur das Abfragen der installierten Software ist einfach unglaublich lang.

    Selbst wenn die Quelldatei vorher schon nur mit "online" Rechnern gefüllt ist, dauert es mehrere Stunden.

    <push>

  • Softwareinventarisierung

    • Lashandan
    • 24. Juli 2018 um 15:45
    Zitat von Gun-Food

    hallo,

    ich würde bei der Vielzahl von Datumsangaben das einmal in eine Variable packen und die verwenden, statt das immer und immer wieder zu tippen.

    AutoIt
    Func OSList()
        Local $sDateTime = @MON & @MDAY & @YEAR & "_" & @HOUR & "_" & @MIN
        Local $sDateTimeNice = @WDAY & "." & @MON & "." & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC
        Local $sFileName =  $sDateTime & "_LogFileOS.txt"
        Local $sScriptDir = @ScriptDir & "/"
        Local $sLogFileOS = $sScriptDir & $sFileName
        Local $hOpenLFileOS = FileOpen($sLogFileOS, $FO_OVERWRITE) ; ACHTUNG: Ab hier wird nur noch mit dem Handle $hOpenLFileOS gearbeitet. Nicht mit $sLogFileOS.
        If $hOpenLFileOS = -1 Then
            MsgBox($MB_SYSTEMMODAL, "Abbruch", $sLogFileOS & " konnte nicht geöffnet werden!")
            Exit
        EndIf
    ...
    Alles anzeigen

    Das werde ich auf jeden Fall noch berücksichtigen,

    vielen Dank für den Hinweis.

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™