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

Beiträge von casi4712

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 26. Mai 2023 um 19:25

    ok ich habs herausgefunden, war einfacher als ich dachte, für die die das selbe Problem haben, hier kurz das Vorgehen:

    AutoIt
    Func _conIPprt()
        Local $sipPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idIPPrinters)
        Local $aList = IPprt()
        Local $vbsScriptPath = "C:\Windows\SysWOW64\Printing_Admin_Scripts\de-DE\prnport.vbs"
        Local $printerPort = '9100'
        For $i = 1 To UBound($aList) - 1 ;read out TableValues
            If $aList[$i][0] & " - " & $aList[$i][1] = $sipPrinter Then
                $PrName = $aList[$i][0]
                $Port = $aList[$i][1]
                $ip = $aList[$i][2]
                $driver = $aList[$i][3]
                $pName = $aList[$i][4]
                $room = $aList[$i][5]
                $TS = $aList[$i][6]
                ExitLoop
            EndIf
        Next
      ;MsgBox(262144,"Driver", $driver)
         RunWait('cscript.exe "' & $vbsScriptPath & '" -a -r ' & $Port & ' -h ' & $IP & ' -o raw -n ' & $printerPort, "", @SW_HIDE) ;make port
         RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b " & '"' & $PrName & '" /f "' & $driver & '" /r "' & $Port & '" /m "' & $pName & '" /z') ; connect printer
         RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & $PrName & '"') ; make standard
        ; RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /k /n " & '"' & $PrName & '"') ; Testdruck
    
    EndFunc
    Alles anzeigen

    Frohe Pfingsten

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 21. Mai 2023 um 14:19

    Hallo noch mal,

    Eigentlich dachte ich ja dieses Druckermodul ist mit 100 Zeilen abgeschlossen, aber es ist wie es ist, es kommen immer noch Ideen und Wünsche dazu. Ich habe das Script jetzt noch mal entsprechend modifiziert und mit einer Combo ergänzt für "reine IP Printer" die nicht über einen Printserver vervunden sind. Da hier ein Scan zwar möglich wäre, dies aber in der Regel doch ziemlich lange dauert, habe ich mich entschlossen dies mit einer CSV EIngabe zu erledigen. Die Strunktur dieser Tabelle schaut exemplarisch so aus:

    Code
    Druckername,IP-Adresse,Treiberpfad,PName,Raum
    Kyocera KY 301,192.168.178.50,\\drivers\PRINTERMOD\IP-Drucker\kyocera\E_WF1XZE.INF,Kyocera KY 301,2.21
    XP-3150 Series,EP_192.168.178.49,\\drivers\PRINTERMOD\IP-Drucker\Epson\EPPRNUT.INF,XP-3150 Series,P1
    HP-301,IP_192.168.100.44,C:\\drivers\PRINTERMOD\IP-Drucker\Epson\EPPRNUT.INF,HP-301,2.19

    NUn versuche ich also eine Funktion zu bauen die dann in Abhängigkeit von der Auswahl diese Werte aus der jeweiligen Tabellenzeile ausliest, damiut ich dann entsprechend diesen Befehl zusammenbauen kann:

    Code
    rundll32 printui.dll,PrintUIEntry /b "Dell 3110cn" /f "\\driver\Int0101\IP-Drucker\Dell 3110cn\dlxbuzi.inf" /r "IP_192.168.100.49:" /m "PName" /if

    Ich habe ja das entsprechende Array, aber wie kann ich die entsprechenden Werte zuweisen aus der Comboauswahl, geht das überhaupt? Ich hoffe meine Frage war halbwegs verständlich. Mein modifiziertes Script sieht wie folgt aus:

    Zitat
    AutoIt
    #include-once
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <GuiComboBox.au3>
    #include <StringSize.au3>
    #include <GuiListView.au3>
    Opt("GUIOnEventMode", 1)
    #NoTrayIcon
    
    
    
    Global $SubBack = 0xFFFFFF, $sBeepFile="", $mPrinterGuis[]
    Global $sPrintServer = "Druck.vwlt.antrax-berlin.de"
     $hMainGui = GUICreate("Some Window", 600, 400)
     Global $mPrinter = _Form2($hMainGui)
      If @error Then MsgBox(16, "Error", "Fehler bei der Initialisierung des Druckerfensters: "&@error&":"&@extended)
    
    GUISetState(@SW_SHOW, $mPrinter.Gui)
    
    While Sleep(100)
    WEnd
    
    Func _Form2($hParent)
        Local $iWidth = 430, $iHeight = 480, $iBorder = 10, $iWidthRight = 100, $iListHeight = 120, $iLineHeight = 30
        Local $iWidthLeft = $iWidth-$iWidthRight-$iBorder*3
        Local $mPrinterGuiData[]
        Global $aList = _getNetworkPrinters()
        Global $iList
        Global $str
    
        ; CREATE GUI
        $mPrinterGuiData.Gui = GUICreate("DRUCKER ZUWEISEN", $iWidth, $iHeight, -1, -1, -1, -1, $hParent)
        If @error Then Return SetError(1, 0, -1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_closePrinterGui", $mPrinterGuiData.Gui)
        GUISetBkColor($SubBack, $mPrinterGuiData.Gui)
    
        ; CREATE LEFT COLUMN
        Local $iTop = $iBorder
    
        ; default printer
        GUICtrlCreateLabel("Standarddrucker: ", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 12, 900) ; bold
        $mPrinterGuiData.idDefaultPrinter = GUICtrlCreateLabel("", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
    
    
    ; INSTALLED PRINTERS
        ;$iTop += $iLineHeight
        GUICtrlCreateLabel("Lokale Drucker: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        Local $iRightColumnTop = $iTop
        $mPrinterGuiData.idInstalledPrinters = GUICtrlCreateList("", $iBorder, 100, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight+$iLineHeight
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
    
    
        $idButton_Refresh = GUICtrlCreateButton("Refresh", 170, 220, 70, 30)
         GUICtrlSetOnEvent( -1, "_Refresh")
         GUICtrlSetTip( -1, "Druckelisten aktualisieren")
        $idButton_New = GUICtrlCreateButton("New", 240, 220, 70, 30)
         GUICtrlSetOnEvent( -1, "_addprt")
         GUICtrlSetTip( -1, "Neuer lokaler Drucker")
    
    ; CONNECTED PRINTERS
        GUICtrlCreateLabel ( "Verbundene Drucker: ", 10, 227, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idConnectedPrinters = GUICtrlCreateList("", $iBorder, 260, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
    
    ; NETWORK PRINTERS
        GUICtrlCreateLabel("Netzwerkdrucker einbinden: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idNoPrintServer = GUICtrlCreateLabel("Kein Druckserver", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        GUICtrlSetFont(-1, 9, 900) ; bold
        GUICtrlSetState(-1, $GUI_HIDE)
    
        $mPrinterGuiData.idNetworkPrinters = GUICtrlCreateCombo("", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += 50
         GUICtrlSetOnEvent(-1, "_conPrinter")
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    
    ;  IP PRINTERS
       GUICtrlCreateLabel ( "IP Drucker einbinden: ", 10, 425, 150, 20 )
      GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idIPPrinters = GUICtrlCreateCombo("", $iBorder, 445, $iWidthLeft, $iLineHeight)
        $iTop += 50
        ;GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight
                 $iList = IPprt()
                For $i = 1 To UBound($iList) - 1
                 If $iList[$i][0] <> "" Then $var = GUICtrlSetData($mPrinterGuiData.idIPPrinters, $iList[$i][0] & " - " & $iList[$i][1])
                  GUICtrlSetOnEvent($mPrinterGuiData.idIPPrinters, "_conIPprt")
                Next
    
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
        
    ; CREATE RIGHT COLUMN
        Local $arButtons = [["idTestprint", "Testdruck", "_doTestPrint", "Testdruck auf gewählten Drucker"],["idSettings", "Einstellungen", "_openSettings", "Einstellungen öffnen loakaler/Netzwerk Drucker"],["idPreferences", "Eigenschaften", "_openPreferences", "Eigenschaften loakaler/Netzwerk Drucker"], _
                            ["idQueue", "Warteschlange", "_openQueue", "Wartenschlange anzeigen loakaler/Netzwerk Drucker"],["idPrintfolder", "Druckerordner", "_openPrintFolder", "Printerfolder anzeigen"],["idDefault", "Standard", "_setDefaultPrinter", "Standard Drucker setzen"], _
                            ["idDelete", "Delete", "_DeletePrinter", "Drucker löschen loakaler/Netzwerk Drucker"], ["idIPlist", "IP-List", "_IPList", "IP-Liste der Printserver Drucker"], ["idIPlistNon", "IP-ListNoPS", "_IPListNon", "IP-Liste sonstiger IP Drucker"] ]
        For $i = 0 To UBound($arButtons)-1 Step 1
            ;$mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop+$iBorder+($iLineHeight+$iBorder)*$i, $iWidthRight, $iLineHeight)
            $mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop-0+(32+$iBorder)*$i, $iWidthRight, $iLineHeight)
            GUICtrlSetOnEvent(-1, $arButtons[$i][2])
            GUICtrlSetTip( -1, $arButtons[$i][3])
        Next
    
        $mPrinterGuis[$mPrinterGuiData.Gui] = $mPrinterGuiData
        GUISwitch($hParent)
        Return $mPrinterGuiData
    EndFunc
    
    
    
    ;------------------------------------------------------------------------------------------------------------------------
    ;OTHER FUNCTIONS
    ;------------------------------------------------------------------------------------------------------------------------
    
    Func IPprt()
        Local $sFile = @ScriptDir & "\IPs.csv"
        Local $sFileData = FileRead($sFile)
        Local $sFirstLine = FileReadLine($sFile, 1)
        Local $asCSV[0][UBound(StringSplit($sFirstLine, ",", 3))]
        _ArrayAdd($asCSV, $sFileData, 0, ",")
        Return $asCSV ; Rückgabe des Arrays
    EndFunc
    
    Func _conIPprt()
      $sipPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idIPPrinters)
      MsgBox(16, "Error", $sipPrinter)
        ;$command2 = ('rundll32 printui.dll,PrintUIEntry /b "' & GUICtrlRead($typ) & '" /f "' & @scriptdir & '\' & $treiber & 'dlxbuzi.inf" /r "IP_'& GUICtrlRead($host) & ':" /m "' & GUICtrlRead($typ) & '" /if')
        ; $command2 = ('rundll32 printui.dll,PrintUIEntry /b '"EPSON XP-3150 Series"' /if /f "C:\Users\driver\Desktop\PRINTERMOD\IP-Drucker\Epson\EPPRNUT.INF" /r '"EP_192.168.178.49"' /u "')
        ;ConsoleWrite($command2)
        ;Run(@comspec & ' /c ' & $command2,'',@SW_SHOW)
    EndFunc
    
    Func _IPListNon() ;NON Printserver
    If  IsArray($iList) = "" Then
           MsgBox(262144,"Title", "keine Netzerkdrucker verfügbar! ")
          else
           ;_ArrayDisplay($iList,  "sonstige IP Drucker", Default, 64)
            Local $iListModified = $iList
            _ArrayDelete($iListModified, 2) 
        _ArrayDisplay($iList,  "sonstige IP Drucker", Default, 64)    
          EndIF
    EndFunc
    
    Func _IPList()
          If  IsArray($aList) = "" Then
           MsgBox(262144,"Title", "keine Netzerkdrucker verfügbar! ")
          else
           _ArrayDisplay($aList, "IP-Liste Druckserver")
          EndIF
    EndFunc
    
    
    Func _conPrinter()
      Local $sText = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idNetworkPrinters)
      Local $var1 = 'Drucker' & " " & $sText & @CRLf & 'wird verbunden'
      Local $var2 = 'Drucker wurde verbunden und auf Standard gesetzt!'
        _SPText($Var1)
           RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')
           RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')
        _updatePrinters($mPrinter)
        _SPText($Var2)
    EndFunc
    
    Func _SPText($var)
      SplashTextOn('', $Var, 300, 60, -1, -1, $DLG_NOTITLE)
      Sleep(2000)
      SplashOff()
    EndFunc
    
    Func _Refresh()
     _updatePrinters($mPrinter)
    EndFunc
    
    
    Func _addprt()
       Run(@ComSpec & " /c " & "Rundll32 shell32.dll,SHHelpShortcuts_RunDLL AddPrinter", "", @SW_HIDE)
    EndFunc
    
    
    Func _selPrinterLimitToOne()
        _GUICtrlListBox_SetCurSel(@GUI_CtrlId=$mPrinterGuis[@GUI_WinHandle].idConnectedPrinters?$mPrinterGuis[@GUI_WinHandle].idInstalledPrinters:$mPrinterGuis[@GUI_WinHandle].idConnectedPrinters, -1)
    EndFunc
    
    Func _updatePrinters($mPrinterGuiData)
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    EndFunc
    
    Func _closePrinterGui()
        GUISetState(@SW_HIDE, $mPrinterGuis[@GUI_WinHandle].Gui)
    EndFunc
    
    Func _networkPrinterSelection()
        Local $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idNetworkPrinters)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  \\" & $sPrintServer &"\"& $sPrinter)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n \\"  & $sPrintServer &"\"& $sPrinter)
        MsgBox('262144', "Default printer", "Default printer set to: " & $sPrinter)
    EndFunc
    
    
    Func _TestListbox(); Check which Listbox selected
        If GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters) <> "" And GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters) = "" Then
        If @error Then Return SetError(1, 0, -1)
            MsgBox(0, "", "Selection from Local Printer: ")
             $str = ""
        ElseIf GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters) <> "" And GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters) = "" Then
            MsgBox(0, "", "Selection from conPrinters: ")
              $str = $sPrintServer
              ;$sprinter=Sprintserver & mPrinter
        Else
           ; MsgBox(0, "", "No selection made.")
             If @error Then Return SetError(1, 0, -1)
         Return 1
        EndIf
    EndFunc
    
    Func _printExec($sCommand)
     _TestListbox()
        Local $sPrinter = _getSelectedPrinterAbs()
         If @error Then Return SetError(1, 0, -1)
        ConsoleWrite( "rundll32 printui.dll,PrintUIEntry /n " & $sPrinter & " "&$sCommand)
        RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $sPrinter & " "&$sCommand, "", @SW_HIDE )
         If @error Then Return SetError(2, 0, -1)
        Return $sPrinter
    EndFunc
    
    Func _DeletePrinter()
        SoundPlay($sBeepFile)
          _TestListbox()
    MsgBox(0, "", $str)
        ;_printExec("/p")
        Local $sPrinter = _getSelectedPrinterAbs()
      If @error Then Return SetError(1, 0, -1)
        
        if $str = "" Then
         RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /q /n " & $sPrinter) ;rundll32 printui.dll,PrintUIEntry /dn /q /n \\druck.xy.de\printername nur verbindung
         ConsoleWrite( "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /q /n " & $sPrinter)
        Else
         RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dn /q /n " & $sPrinter) ;rundll32 printui.dll,PrintUIEntry /dn /q /n \\druck.xy.de\printername nur verbindung
         ConsoleWrite( "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dn /q /n " & $sPrinter)
        EndIF
        
     If @error Then Return SetError(2, 0, -1)
        _updatePrinters($mPrinter)
        Return $sPrinter
    EndFunc
    
    Func _setDefaultPrinter()
        SoundPlay($sBeepFile)
        _TestListbox()
         Local $sPrinter = _getSelectedPrinterAbs()
          If @error Then Return SetError(1, 0, -1)
         RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $sPrinter)
         ConsoleWrite("\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $sPrinter )
          If @error Then Return SetError(2, 0, -1)
        _updatePrinters($mPrinter)
        Return $sPrinter
    EndFunc
    
    Func _doTestPrint()
        SoundPlay($sBeepFile)
        Local $sPrinter = _printExec("/k")
         If Not @error Then MsgBox('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & _getSelectedPrinter() & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
    EndFunc
    
    Func DelPrintingqueue()
    ; net stop spooler
    ; del /Q /F %systemroot%\System32\spool\PRINTERS\*
    ; net start spooler
    EndFunc
    
    Func _openSettings()
        SoundPlay($sBeepFile)
        _printExec("/e")
    EndFunc
    
    Func _openPreferences()
        SoundPlay($sBeepFile)
        _printExec("/p")
    EndFunc
    
    Func _openQueue()
        SoundPlay($sBeepFile)
        _printExec("/o")
    EndFunc
    
    Func _openPrintFolder()
        SoundPlay($sBeepFile)
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    ; Returns the selected printer with the absolute path including \\ and the computer name
    Func _getSelectedPrinterAbs()
        Local $sPrinter = _getSelectedPrinter()
    
        If @error Then Return SetError(1, 0, -1)
        ;idee: if Str0
        If $str = "" Then $sPrinter = '"\\' & @ComputerName & "\" & $sPrinter & '"'
        If $str = $sPrintServer Then $sPrinter = '"\\' & $sPrintServer & "\" & $sPrinter & '"'
         ; MsgBox(16, "Test3", $str)
        Return $sPrinter
    EndFunc
    
    Func _getSelectedPrinter()
        Local $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters)
        If $sPrinter = "" Then $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters)
        If $sPrinter = "" Then
            MsgBox(16, "Druckerauswahl", "Es wurde kein Drucker ausgewählt!")
            Return SetError(1, 0, -1)
        EndIf
        Return $sPrinter
    EndFunc
    
    Func _updateDefaultPrinter($idLabel)
        Local $sDefaultPrinter = _getDefaultPrinter()
        If @error Then Return SetError(2, @error, -1)
        GUICtrlSetData($idLabel, $sDefaultPrinter)
        Return 1
    EndFunc
    
    Func _updateInstalledPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
            _GUICtrlListBox_AddString($idList, $sPrinterName)
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    Func _updateConnectedPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
             Local $arPrinter = StringSplit($sPrinterName, ",")
            If UBound($arPrinter)>1 Then _GUICtrlListBox_AddString($idList, $arPrinter[4])
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    Func _updateNetworkPrinters($idCombo, $idLabel)
        _GUICtrlComboBox_ResetContent($idCombo)
        Local $arPrinters = _getNetworkPrinters()
        If Not IsArray($arPrinters) Then
            GUICtrlSetState($idCombo, $GUI_HIDE)
            GUICtrlSetState($idLabel, $GUI_SHOW)
        Else
            GUICtrlSetState($idCombo, $GUI_SHOW)
            GUICtrlSetState($idLabel, $GUI_HIDE)
            For $i=1 To UBound($arPrinters)-1 Step 1
                If $arPrinters[$i][0] <> "" Then _GUICtrlComboBox_AddString($idCombo, $arPrinters[$i][0])
            Next
        EndIf
        Return 1
    EndFunc
    
    
    ; Returns the name of the default printer;
    ; Errors:     1 - Registry entry could not be read
    ;             2 - Registry entry could not be parsed
    Func _getDefaultPrinter()
        Local $sDefaultPrinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        If @error Then Return SetError(1, 0, -1)
        Local $arDefaultPrinter = StringSplit($sDefaultPrinter, ",")
        If UBound($arDefaultPrinter)>0 Then Return $arDefaultPrinter[1]
        Return SetError(2, 0, -1)
    EndFunc
    
    ;-------------------------------------------------------------------------------------------------------------------
    ; Returns a 2D array with network printers: 0 name; 1 driverName; 2 portName; 3 Shared; 4 ShareName; 5 Published; 6 Local; 7 Location; 8 DeviceID; 9 DriverName
    ; Errors:     1 - Printserver file does not exist
    ;             2 - Printer query failed
    ;             3 - No printers found
    Func _getNetworkPrinters()
        If Not FileExists("\\"&$sPrintServer&"\c$") Then Return SetError(1, 0, -1)
    
        Local $objWMIService = ObjGet("winmgmts:\\" & $sPrintServer & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
        If Not IsObj($colItems) Then Return SetError(2, 0, -1)
        If Not $colItems.count Then Return SetError(3, 0, -1) ; No Printer found
        Local $aPrinter[$colItems.count][10], $i = 0
        For $oItem In $colItems
            $aPrinter[$i][0] = $oItem.Name
            $aPrinter[$i][1] = $oItem.DriverName
            $aPrinter[$i][2] = $oItem.PortName
            $aPrinter[$i][3] = $oItem.Shared
            $aPrinter[$i][4] = $oItem.ShareName
            $aPrinter[$i][5] = $oItem.Published
            $aPrinter[$i][6] = $oItem.Local
            $aPrinter[$i][7] = $oItem.Location
            $aPrinter[$i][8] = $oItem.DeviceID
            $aPrinter[$i][9] = $oItem.DriverName
            $i += 1
        Next
        Return $aPrinter
         _ArrayDisplay($aPrinter)
    EndFunc
    
    
    EndFunc
    Alles anzeigen

    Ich hoffe das ist jetzt nicht das Riesenproblem, über entsprechendes Feedback würde ich mich sehr freuen.

    LG und einen schönen Sonntag noch;)

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 13. Mai 2023 um 11:51

    ok hab jetzt eine Lösung für das Problem gefunden, wahrscheinlich wieder ne dumme Lösung, aber sie funktioniert, der String für die beiden Bedingungen muss natürlich noch gebaut werden, für die die es interessiert:

    AutoIt
    Func _printExec($sCommand)
       If GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters) <> "" And GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters) = "" Then
         MsgBox(0, "", "Selection from Local Printer: ")
         ;Variable Printserver = Lokaler PC
       ElseIf GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters) <> "" And GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters) = "" Then
         MsgBox(0, "", "Selection from conPrinters: ")
         ;Variable Printserver = Printserver
       Else
         MsgBox(0, "", "No selection made.")
         Return 1
       EndIf
      .
      .
      .
        Local $sPrinter = _getSelectedPrinterAbs()
        MsgBox(262144,"Title", $sPrinter)
        If @error Then Return SetError(1, 0, -1)
        RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $sPrinter & " "&$sCommand )
        If @error Then Return SetError(2, 0, -1)
        Return $sPrinter
    EndFunc
    Alles anzeigen

    Vielen Dank noch mal für alle Helfer und schönes Wocheende noch

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 11. Mai 2023 um 11:32

    okidoki, danke für den Input,

    wie gesagt fand es nur verwunderlich dass bei meinem Ansatz es Wurscht war ob das Anführungszeichen im Druckernamen stehen, klar ist es eleganter es so zu definieren

    Dann noch mal zur Function _GetSelectedPrinter, ich habe die Buttons noch mal überprüft mit ConsoleWrite, bei Druckern die aus dem Lokalen Fenster gewählt wurden, macht er es richtig, also zB so

    rundll32 printui.dll,PrintUIEntry /n "\\lokalerPC\Microsoft Print to PDF" /k , bei einem Drucker aus dem unteren, haut er nur einen Fehler raus, er schreibt auch nichts in die Console. Der Fehler: Vorgang konnte nicht abgeschlossen werden (0x00000709).

    Noch mal das fast fertige Modul, vielleicht fällt ja noch jemanden was auf:

    AutoIt
    #include-once
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <GuiComboBox.au3>
    
    Opt("GUIOnEventMode", 1)
    #NoTrayIcon
    
    Global $SubBack = 0xFFFFFF, $sBeepFile="", $mPrinterGuis[]
    Global $sPrintServer = "Druck.vwlt.antrax-berlin.de"
    $hMainGui = GUICreate("Some Window", 600, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_close", $hMainGui)
    
    $idButton = GUICtrlCreateButton("Printers", 10, 10)
    GUICtrlSetOnEvent(-1, "_openPrinters")
    
    Global $mPrinter = _createPrinterGui($hMainGui)
    If @error Then MsgBox(16, "Error", "Fehler bei der Initialisierung des Druckerfensters: "&@error&":"&@extended)
    
    
    GUISetState(@SW_SHOW, $hMainGui)
    
    While Sleep(100)
    WEnd
    
    
    
    Func _openPrinters()
        _updatePrinters($mPrinter)
        GUISetState(@SW_SHOW, $mPrinter.Gui)
    EndFunc
    
    
    
    Func _close()
        Exit
    EndFunc
    
    Func _createPrinterGui($hParent)
        Local $iWidth = 430, $iHeight = 430, $iBorder = 10, $iWidthRight = 100, $iListHeight = 120, $iLineHeight = 30
        Local $iWidthLeft = $iWidth-$iWidthRight-$iBorder*3
        Local $mPrinterGuiData[]
        Global $aList = _getNetworkPrinters()
    
        ; Create Gui
        $mPrinterGuiData.Gui = GUICreate("DRUCKER ZUWEISEN", $iWidth, $iHeight, -1, -1, -1, -1, $hParent)
        If @error Then Return SetError(1, 0, -1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_closePrinterGui", $mPrinterGuiData.Gui)
        GUISetBkColor($SubBack, $mPrinterGuiData.Gui)
    
        ; create left column
        Local $iTop = $iBorder
    
        ; default printer
        GUICtrlCreateLabel("Standarddrucker: ", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idDefaultPrinter = GUICtrlCreateLabel("", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
    
        ; installed printers
        ;$iTop += $iLineHeight
        GUICtrlCreateLabel("Installierte Drucker: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        Local $iRightColumnTop = $iTop
        $mPrinterGuiData.idInstalledPrinters = GUICtrlCreateList("", $iBorder, $iTop, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight+$iLineHeight
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
    
        ; connected printers
        GUICtrlCreateLabel ( "Verbundene Drucker: ", 10, 220, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idConnectedPrinters = GUICtrlCreateList("", $iBorder, $iTop, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
    
        ; network printers
        GUICtrlCreateLabel("Netzwerkdrucker einbinden: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idNoPrintServer = GUICtrlCreateLabel("Kein Druckserver", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        GUICtrlSetFont(-1, 9, 900) ; bold
        GUICtrlSetState(-1, $GUI_HIDE)
    
        $mPrinterGuiData.idNetworkPrinters = GUICtrlCreateCombo("", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += 50
         GUICtrlSetOnEvent(-1, "_conPrinter")
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    
    
        ; create right column
        Local $arButtons = [["idTestprint", "Testdruck", "_doTestPrint"],["idSettings", "Einstellungen", "_openSettings"],["idPreferences", "Eigenschaften", "_openPreferences"], _
                            ["idQueue", "Warteschlange", "_openQueue"],["idPrintfolder", "Druckerordner", "_openPrintFolder"],["idDefault", "Standard", "_setDefaultPrinter"], _
                            ["idDelete", "Delete", "_DeletePrinter"], ["idIPlist", "IP-List", "_IPList"]]
        For $i = 0 To UBound($arButtons)-1 Step 1
            ;$mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop+$iBorder+($iLineHeight+$iBorder)*$i, $iWidthRight, $iLineHeight)
            $mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop-0+($iLineHeight+$iBorder)*$i, $iWidthRight, $iLineHeight)
            GUICtrlSetOnEvent(-1, $arButtons[$i][2])
        Next
    
        $mPrinterGuis[$mPrinterGuiData.Gui] = $mPrinterGuiData
        GUISwitch($hParent)
        Return $mPrinterGuiData
    EndFunc
    ;------------------------------------------------------------------------------------------------------------------------
    
    Func _conPrinter()
      Local $sText = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idNetworkPrinters)
      Local $var1 = 'Drucker' & " " & $sText & @CRLf & 'wird verbunden'
      Local $var2 = 'Drucker wurde verbunden und auf Standard gesetzt!'
        _SPText($Var1)
           RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')
           RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')
        _updatePrinters($mPrinter)
        _SPText($Var2)
    EndFunc
    
    Func _SPText($var)
      SplashTextOn('', $Var, 300, 60, -1, -1, $DLG_NOTITLE)
      Sleep(2000)
      SplashOff()
    EndFunc
    
    Func _IPList()
          If  IsArray($aList) = "" Then
           MsgBox(262144,"Title", "keine Netzerkdrucker verfügbar! ")
          else
           _ArrayDisplay($aList)
          EndIF
    EndFunc
    
    Func _selPrinterLimitToOne()
        _GUICtrlListBox_SetCurSel(@GUI_CtrlId=$mPrinterGuis[@GUI_WinHandle].idConnectedPrinters?$mPrinterGuis[@GUI_WinHandle].idInstalledPrinters:$mPrinterGuis[@GUI_WinHandle].idConnectedPrinters, -1)
    EndFunc
    
    Func _updatePrinters($mPrinterGuiData)
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    EndFunc
    
    Func _closePrinterGui()
        GUISetState(@SW_HIDE, $mPrinterGuis[@GUI_WinHandle].Gui)
    EndFunc
    
    Func _networkPrinterSelection()
        Local $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idNetworkPrinters)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  \\" & $sPrintServer &"\"& $sPrinter)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n \\"  & $sPrintServer &"\"& $sPrinter)
        MsgBox('262144', "Default printer", "Default printer set to: " & $sPrinter)
    EndFunc
    
    Func _doTestPrint()
        SoundPlay($sBeepFile)
        
        Local $sPrinter = _printExec("/k")
        If Not @error Then MsgBox('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & _getSelectedPrinter() & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
    EndFunc
    
    Func _openSettings()
        SoundPlay($sBeepFile)
        _printExec("/e")
    EndFunc
    
    Func _DeletePrinter()
        SoundPlay($sBeepFile)
        ;_printExec("/p")
        Local $sPrinter = _getSelectedPrinterAbs()
        If @error Then Return SetError(1, 0, -1)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /n " & $sPrinter)
         If @error Then Return SetError(2, 0, -1)
        _updatePrinters($mPrinter) 
        Return $sPrinter
    EndFunc
    
    Func _openPreferences()
        SoundPlay($sBeepFile)
        _printExec("/p")
    EndFunc
    
    Func _openQueue()
        SoundPlay($sBeepFile)
        _printExec("/o")
    EndFunc
    
    Func _openPrintFolder()
        SoundPlay($sBeepFile)
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    Func _setDefaultPrinter()
        SoundPlay($sBeepFile)
        Local $sPrinter = '"' & GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters) & '"'
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $sPrinter)
        _updateDefaultPrinter($mPrinterGuis[@GUI_WinHandle].idDefaultPrinter)
    EndFunc
    
    Func _printExec($sCommand)
        Local $sPrinter = _getSelectedPrinterAbs()
        MsgBox(262144,"Title", $sPrinter)
        If @error Then Return SetError(1, 0, -1)
        RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $sPrinter & " "&$sCommand )
        If @error Then Return SetError(2, 0, -1)
        Return $sPrinter
    EndFunc
    
    ; Returns the selected printer with the absolute path including \\ and the computer name
    Func _getSelectedPrinterAbs()
        Local $sPrinter = _getSelectedPrinter()
        If @error Then Return SetError(1, 0, -1)
        If Not StringInStr($sPrinter, "\\") Then $sPrinter = '"\\' & @ComputerName & "\" & $sPrinter & '"'
        Return $sPrinter
    EndFunc
    
    Func _getSelectedPrinter()
        Local $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idInstalledPrinters)
        If $sPrinter = "" Then $sPrinter = GUICtrlRead($mPrinterGuis[@GUI_WinHandle].idConnectedPrinters)
        If $sPrinter = "" Then
            MsgBox(16, "Druckerauswahl", "Es wurde kein Drucker ausgewählt!")
            Return SetError(1, 0, -1)
        EndIf
        Return $sPrinter
    EndFunc
    
    Func _updateDefaultPrinter($idLabel)
        Local $sDefaultPrinter = _getDefaultPrinter()
        If @error Then Return SetError(2, @error, -1)
        GUICtrlSetData($idLabel, $sDefaultPrinter)
        Return 1
    EndFunc
    
    Func _updateInstalledPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
            _GUICtrlListBox_AddString($idList, $sPrinterName)
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    Func _updateConnectedPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
             Local $arPrinter = StringSplit($sPrinterName, ",")
            If UBound($arPrinter)>1 Then _GUICtrlListBox_AddString($idList, $arPrinter[4])
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    Func _updateNetworkPrinters($idCombo, $idLabel)
        _GUICtrlComboBox_ResetContent($idCombo)
        Local $arPrinters = _getNetworkPrinters()
        If Not IsArray($arPrinters) Then
            GUICtrlSetState($idCombo, $GUI_HIDE)
            GUICtrlSetState($idLabel, $GUI_SHOW)
        Else
            GUICtrlSetState($idCombo, $GUI_SHOW)
            GUICtrlSetState($idLabel, $GUI_HIDE)
            For $i=1 To UBound($arPrinters)-1 Step 1
                If $arPrinters[$i][0] <> "" Then _GUICtrlComboBox_AddString($idCombo, $arPrinters[$i][0])
            Next
        EndIf
        Return 1
    EndFunc
    
    ; Returns the name of the default printer;
    ; Errors:     1 - Registry entry could not be read
    ;             2 - Registry entry could not be parsed
    Func _getDefaultPrinter()
        Local $sDefaultPrinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        If @error Then Return SetError(1, 0, -1)
        Local $arDefaultPrinter = StringSplit($sDefaultPrinter, ",")
        If UBound($arDefaultPrinter)>0 Then Return $arDefaultPrinter[1]
        Return SetError(2, 0, -1)
    EndFunc
    
    ;-------------------------------------------------------------------------------------------------------------------
    ; Returns a 2D array with network printers: 0 name; 1 driverName; 2 portName; 3 Shared; 4 ShareName; 5 Published; 6 Local; 7 Location; 8 DeviceID; 9 DriverName
    ; Errors:     1 - Printserver file does not exist
    ;             2 - Printer query failed
    ;             3 - No printers found
    Func _getNetworkPrinters()
        If Not FileExists("\\"&$sPrintServer&"\c$") Then Return SetError(1, 0, -1)
    
        Local $objWMIService = ObjGet("winmgmts:\\" & $sPrintServer & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
        If Not IsObj($colItems) Then Return SetError(2, 0, -1)
        If Not $colItems.count Then Return SetError(3, 0, -1) ; No Printer found
        Local $aPrinter[$colItems.count][10], $i = 0
        For $oItem In $colItems
            $aPrinter[$i][0] = $oItem.Name
            $aPrinter[$i][1] = $oItem.DriverName
            $aPrinter[$i][2] = $oItem.PortName
            $aPrinter[$i][3] = $oItem.Shared
            $aPrinter[$i][4] = $oItem.ShareName
            $aPrinter[$i][5] = $oItem.Published
            $aPrinter[$i][6] = $oItem.Local
            $aPrinter[$i][7] = $oItem.Location
            $aPrinter[$i][8] = $oItem.DeviceID
            $aPrinter[$i][9] = $oItem.DriverName
            $i += 1
        Next
        Return $aPrinter
         _ArrayDisplay($aPrinter)
    EndFunc
    Alles anzeigen

    Um es noch mal konkret zu formulieren, wie kann ich hier eine IF Bedingung in der Func _printExec integrieren,um abzufragen, ob das gewähle Element aus dem oberen Fenster oder dem unteren Fenster stammt, damit ich die Exec Befehle entsprechend mit vorangestellten Localhost oder aber vorangestelltem Printserver ausgestalten kann. Gibt es da eine Möglichkeit? Im vorliegenden Code wird immer der localhost vorangestellt und das funktioniert bei Druckserver Netzwerkdruckern einfach nicht.


    lg und eine schöne Restwoche noch

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 11. Mai 2023 um 08:39

    ok dein Tip mit ConsoleWrite war natürlich Gold Wert, es muss so heissen:

    AutoIt
          RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')
          RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & "\\" & $sPrintServer & "\" & $sText & '"')

    Wie gesagt, nur komisch, dass ihm das bei meiner vorherigen Version egal war.

    Aber um noch mal zurückzukommen zu Deiner Aussage bzgl. wenn ich die Button nutzen will für die verbundenen Drucker, dass er dass einer Variable entnehmen müsste, dem ist leider nicht so. Dort wird nirgends reagiert, das funktioniert nur bei den lokalen Druckern. Da vielleicht noch ne Idee

    Recht herzlichen Dank noch mal für die Unterstützung

    lg

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 10. Mai 2023 um 13:56

    Hm dass wär aber sehr merkwürdig, meine beiden Codezeilen hatten ja funktioniert, ok dann werde ich das mal probieren.^Ich denke es hängt mit den Leerzeichen im Druckernamen zusammen, nur so ein dumpfer Verdacht, in meinem Script war ihm das aber egal, das ist ja das komische.


    Danke für den Tip

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 9. Mai 2023 um 15:48

    JO hallo erst mal, und recht schönen Dank für Deine erneute ausführliche Antwort.

    Zitat von Kanashius

    global wird NUR im Notfall genutzt

    ok dass habe ich jetzt verinnerlicht, versucht auch in meinen letzten Scripten zu beherzigen, wenn hier und da doch noch mal was reingeflogen war oder ist, lag das zumeist daran dass erst etwas nicht funktionierte und nachdem ich es dann global gestzt hatte, es dann funktionierte. Aber grundsätzlich noch mal danke für den Hinweis.

    Zitat von Kanashius

    In Zeile 24 wird die Variable deklariert, die du nutzen musst.

    Also statt $mPrinterGuiData.idNetworkPrinters musst du $mPrinter.idNetworkPrinters nutzen.

    Das klingt auch durchaus logisch. Ich kann jetzt jedenfalls nicht 100 prozentig sagen ob ich dises schon versucht hatte, aber wenn doch, dann hat es leider auch nicht funktioniert, wie auch jetzt nicht. Hattest du dir mein Eingangsscript mal angesehen bzw es getestet, ich weiss ja nicht ob Du da zum Testen einen Druckserver zur Verfügung hattest. Beim Klicken auf einen Drucker in der Combo wird der Drucker eintsprechend verbunden, das Windowsfenster mit dem üblichen Treiber werden isntalliert erscheint und der Drucker wird gleich auf Standard gesetzt.

    Das Was er jetzt macht ist folgendes: Er bringt lediglich ein Fenster das er was getan hat, aber ein Drucker wird nicht verbunden, also landet demzufolge auch kein Eintrag in der Registry im Connections Zweig.

    Keine Ahnung was hier wieder schiefläuft, ich gehe schon davon aus dass mein Anliegen klar rüber gekommen war, und die gleiche Version haben wir ja auch. Ist schon manchmal echt verhext.

    Auf jeden Fall noch mal ein riesiges Dankeschön, vielleicht findest Du ja noch einen Hinweis der diese Hauptfunktion hier entsprechend wieder zurückbringt


    lg und deine schöne Restwoche noch

    PS und ja ich habe die entsprechenden Rundll Zeilen wieder einkommentiert!!

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 6. Mai 2023 um 15:40

    So hallo noch mal,

    also irgendwie habe ich Deine Technik wohl noch nicht so ganz verstanden, denn so bekomme ich leider meine Hauptfunktionalität , einen Drucker aus der Combo zu verbinden nicht mehr hin, habe hier alle möglichen Variablenkombinationen versucht, aber angeblich nicht deklariert (neue Funktion), hier ist noch mal mein leicht modifizierter Code:

    AutoIt
    #include-once
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListBox.au3>
    #include <GuiComboBox.au3>
    
    Opt("GUIOnEventMode", 1)
    #NoTrayIcon
    
    Global $SubBack = 0xFFFFFF, $sBeepFile=""
    Global $sText
    Global $sPrintServer = "Druck.vwlt.antrax-berlin.de"
    
    $hMainGui = GUICreate("Some Window", 600, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_close", $hMainGui)
    
    $idButton = GUICtrlCreateButton("Printers", 10, 10)
    GUICtrlSetOnEvent(-1, "_openPrinters")
    
    Global $mPrinter = _createPrinterGui()
    If @error Then MsgBox(16, "Error", "Fehler bei der Initialisierung des Druckerfensters: "&@error&":"&@extended)
    
    GUISetState(@SW_SHOW, $hMainGui)
    
    
    While Sleep(100)
    WEnd
    
    Func _openPrinters()
        _updatePrinters($mPrinter)
        GUISetState(@SW_SHOW, $mPrinter.Form2)
    EndFunc
    
    Func _close()
        Exit
    EndFunc
    
    ; Creates and shows the printer gui and returns a map with printer data:
    ;     $mPrinterGuiData.Form2                     => Gui handle
    ;    $mPrinterGuiData.idDefaultPrinter         => Label with name of default printer
    ;    $mPrinterGuiData.idInstalledPrinters     => List with installed printers
    ;    $mPrinterGuiData.idConnectedPrinters    => List with connected printers
    ;    $mPrinterGuiData.idNetworkPrinters        => Combo with network printers
    ;    $mPrinterGuiData.idNoPrintServer        => Label to show, that no network printers are available
    ;    $mPrinterGuiData.idTestprint            => Button for Testprinting
    ;    $mPrinterGuiData.idSettings                => Button for Settings
    ;    $mPrinterGuiData.idPreferences            => Button for Preferences
    ;    $mPrinterGuiData.idQueue                => Button for Queue
    ;    $mPrinterGuiData.idPrintfolder            => Button for Printfolder
    ;    $mPrinterGuiData.idDefault                => Button for Default printer
    ; Errors:     1 - Gui could not be created
    ;             2 - Default printer could not be found (extended contains the _getDefaultPrinter error)
    ;------------------------------------------------------------------------------------------------------------------------
    Func _createPrinterGui($hParent = 0)
        Local $iWidth = 430, $iHeight = 430, $iBorder = 10, $iWidthRight = 100, $iListHeight = 120, $iLineHeight = 30
        Local $iWidthLeft = $iWidth-$iWidthRight-$iBorder*3
        Local $mPrinterGuiData[]
        Global $aList = _getNetworkPrinters()
    
        ; Create Gui
        $mPrinterGuiData.Form2 = GUICreate("DRUCKER ZUWEISEN", $iWidth, $iHeight, -1, -1, -1, -1, $hParent)
        If @error Then Return SetError(1, 0, -1)
        GUISetOnEvent($GUI_EVENT_CLOSE, "_closePrinterGui", $mPrinterGuiData.Form2)
        GUISetBkColor($SubBack, $mPrinterGuiData.Form2)
    
    
        ; create left column
        Local $iTop = $iBorder
    
        ; default printer
        GUICtrlCreateLabel("Standarddrucker: ", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idDefaultPrinter = GUICtrlCreateLabel("", $iBorder, $iTop, $iWidth-$iBorder*2, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
    
    
    
        ; installed printers
        ;$iTop += $iLineHeight
        GUICtrlCreateLabel("Installierte Drucker: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        Local $iRightColumnTop = $iTop
        $mPrinterGuiData.idInstalledPrinters = GUICtrlCreateList("", $iBorder, $iTop, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight+$iLineHeight
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
    
    
    
        ; connected printers
        GUICtrlCreateLabel ( "Verbundene Drucker: ", 10, 220, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idConnectedPrinters = GUICtrlCreateList("", $iBorder, $iTop, $iWidthLeft, $iListHeight)
        GUICtrlSetOnEvent(-1, "_selPrinterLimitToOne")
        $iTop += $iListHeight
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
    
    
    
        ; network printers
        GUICtrlCreateLabel("Netzwerkdrucker einbinden: ", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += $iLineHeight
        GUICtrlSetFont(-1, 9, 900) ; bold
        $mPrinterGuiData.idNoPrintServer = GUICtrlCreateLabel("Kein Druckserver", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        GUICtrlSetFont(-1, 9, 900) ; bold
        GUICtrlSetState(-1, $GUI_HIDE)
    
    
        $mPrinterGuiData.idNetworkPrinters = GUICtrlCreateCombo("", $iBorder, $iTop, $iWidthLeft, $iLineHeight)
        $iTop += 50
         GUICtrlSetOnEvent(-1, "_conPrinter")
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    
    
        ; create right column
        Local $arButtons = [["idTestprint", "Testdruck", "_doTestPrint"],["idSettings", "Einstellungen", "_openSettings"],["idPreferences", "Eigenschaften", "_openPreferences"], _
                            ["idQueue", "Warteschlange", "_openQueue"],["idPrintfolder", "Druckerordner", "_openPrintFolder"],["idDefault", "Standard", "_setDefaultPrinter"], _
                            ["idDelete", "Delete", "_DeletePrinter"], ["idIPlist", "IP-List", "_IPList"]]
        For $i = 0 To UBound($arButtons)-1 Step 1
            ;$mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop+$iBorder+($iLineHeight+$iBorder)*$i, $iWidthRight, $iLineHeight)
            $mPrinterGuiData[$arButtons[$i][0]] = GUICtrlCreateButton($arButtons[$i][1], $iBorder*2+$iWidthLeft, $iRightColumnTop-0+($iLineHeight+$iBorder)*$i, $iWidthRight, $iLineHeight)
            GUICtrlSetOnEvent(-1, $arButtons[$i][2])
        Next
    
        Return $mPrinterGuiData
    EndFunc
    ;------------------------------------------------------------------------------------------------------------------------
    
    Func _conPrinter()
     ;_ArrayDisplay($aList)
     $sText = GUICtrlRead($mPrinterGuiData.idNetworkPrinters)
              MsgBox('262144', "printer", $sText)
                  RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & $Druckserver & $sText)
               RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "  & $Druckserver & $sText)
                MsgBox('262144', "Default printer", "Default printer set to: " & $sText)
    endFunc
    
    Func _IPList()
          If  IsArray($aList) = "" Then
           MsgBox(262144,"Title", "keine Netzerkdrucker verfügbar! ")
          else
           _ArrayDisplay($aList)
          EndIF
    EndFunc
    
    Func _selPrinterLimitToOne()
        _GUICtrlListBox_SetCurSel(@GUI_CtrlId=$mPrinter.idConnectedPrinters?$mPrinter.idInstalledPrinters:$mPrinter.idConnectedPrinters, -1)
    EndFunc
    
    Func _updatePrinters($mPrinterGuiData)
        _updateDefaultPrinter($mPrinterGuiData.idDefaultPrinter)
        _updateInstalledPrinters($mPrinterGuiData.idInstalledPrinters)
        _updateConnectedPrinters($mPrinterGuiData.idConnectedPrinters)
        _updateNetworkPrinters($mPrinterGuiData.idNetworkPrinters, $mPrinterGuiData.idNoPrintServer)
    EndFunc
    
    Func _closePrinterGui()
        GUISetState(@SW_HIDE, $mPrinter.Form2)
    EndFunc
    
    Func _networkPrinterSelection()
        Local $sPrinter = GUICtrlRead($mPrinter.idNetworkPrinters)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  \\" & $sPrintServer &"\"& $sPrinter)
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n \\"  & $sPrintServer &"\"& $sPrinter)
        MsgBox('262144', "Default printer", "Default printer set to: " & $sPrinter)
    EndFunc
    
    Func _doTestPrint()
        SoundPlay($sBeepFile)
        Local $sPrinter = _printExec("/k")
        If Not @error Then MsgBox('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & _getSelectedPrinter() & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
    EndFunc
    
    Func _openSettings()
        SoundPlay($sBeepFile)
        _printExec("/e")
    EndFunc
    
    Func _openPreferences()
        SoundPlay($sBeepFile)
        _printExec("/p")
    EndFunc
    
    Func _openQueue()
        SoundPlay($sBeepFile)
        _printExec("/o")
    EndFunc
    
    Func _openPrintFolder()
        SoundPlay($sBeepFile)
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    Func _setDefaultPrinter()
        SoundPlay($sBeepFile)
        Local $sPrinter = '"' & GUICtrlRead($mPrinter.idInstalledPrinters) & '"'
        RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $sPrinter)
        _updateDefaultPrinter($mPrinter.idDefaultPrinter)
    EndFunc
    
    Func _printExec($sCommand)
        Local $sPrinter = _getSelectedPrinterAbs()
        If @error Then Return SetError(1, 0, -1)
        RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $sPrinter & " "&$sCommand )
        If @error Then Return SetError(2, 0, -1)
        Return $sPrinter
    EndFunc
    
    ; Returns the selected printer with the absolute path including \\ and the computer name
    Func _getSelectedPrinterAbs()
        Local $sPrinter = _getSelectedPrinter()
        If @error Then Return SetError(1, 0, -1)
        If Not StringInStr($sPrinter, "\\") Then $sPrinter = '"\\' & @ComputerName & "\" & $sPrinter & '"'
        Return $sPrinter
    EndFunc
    
    Func _getSelectedPrinter()
        Local $sPrinter = GUICtrlRead($mPrinter.idInstalledPrinters)
        If $sPrinter = "" Then $sPrinter = GUICtrlRead($mPrinter.idConnectedPrinters)
        If $sPrinter = "" Then
            MsgBox(16, "Druckerauswahl", "Es wurde kein Drucker ausgewählt!")
            Return SetError(1, 0, -1)
        EndIf
        Return $sPrinter
    EndFunc
    
    Func _updateDefaultPrinter($idLabel)
        Local $sDefaultPrinter = _getDefaultPrinter()
        If @error Then Return SetError(2, @error, -1)
        GUICtrlSetData($idLabel, $sDefaultPrinter)
        Return 1
    EndFunc
    
    Func _updateInstalledPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
            _GUICtrlListBox_AddString($idList, $sPrinterName)
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    ;----------------------------------------------------
    Func _updateConnectedPrinters($idList)
        _GUICtrlListBox_ResetContent($idList)
        Local $iCount = 1
        While True
            Local $sPrinterName = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $iCount)
            If @error = -1 Then ExitLoop
            $iCount+=1
             Local $arPrinter = StringSplit($sPrinterName, ",")
            If UBound($arPrinter)>1 Then _GUICtrlListBox_AddString($idList, $arPrinter[4])
        WEnd
        _GUICtrlListBox_SelectString($idList, _getDefaultPrinter())
        Return 1
    EndFunc
    
    Func _updateNetworkPrinters($idCombo, $idLabel)
        _GUICtrlComboBox_ResetContent($idCombo)
        Local $arPrinters = _getNetworkPrinters()
        If Not IsArray($arPrinters) Then
            GUICtrlSetState($idCombo, $GUI_HIDE)
            GUICtrlSetState($idLabel, $GUI_SHOW)
        Else
            GUICtrlSetState($idCombo, $GUI_SHOW)
            GUICtrlSetState($idLabel, $GUI_HIDE)
            For $i=1 To UBound($arPrinters)-1 Step 1
                If $arPrinters[$i][0] <> "" Then _GUICtrlComboBox_AddString($idCombo, $arPrinters[$i][0])
            Next
        EndIf
        Return 1
    EndFunc
    
    
    
    ; Returns the name of the default printer;
    ; Errors:     1 - Registry entry could not be read
    ;             2 - Registry entry could not be parsed
    Func _getDefaultPrinter()
        Local $sDefaultPrinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        If @error Then Return SetError(1, 0, -1)
        Local $arDefaultPrinter = StringSplit($sDefaultPrinter, ",")
        If UBound($arDefaultPrinter)>0 Then Return $arDefaultPrinter[1]
        Return SetError(2, 0, -1)
    EndFunc
    
    ;-------------------------------------------------------------------------------------------------------------------
    ; Returns a 2D array with network printers: 0 name; 1 driverName; 2 portName; 3 Shared; 4 ShareName; 5 Published; 6 Local; 7 Location; 8 DeviceID; 9 DriverName
    ; Errors:     1 - Printserver file does not exist
    ;             2 - Printer query failed
    ;             3 - No printers found
    Func _getNetworkPrinters()
        If Not FileExists("\\"&$sPrintServer&"\c$") Then Return SetError(1, 0, -1)
    
        Local $objWMIService = ObjGet("winmgmts:\\" & $sPrintServer & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
        If Not IsObj($colItems) Then Return SetError(2, 0, -1)
        If Not $colItems.count Then Return SetError(3, 0, -1) ; No Printer found
        Local $aPrinter[$colItems.count][10], $i = 0
        For $oItem In $colItems
            $aPrinter[$i][0] = $oItem.Name
            $aPrinter[$i][1] = $oItem.DriverName
            $aPrinter[$i][2] = $oItem.PortName
            $aPrinter[$i][3] = $oItem.Shared
            $aPrinter[$i][4] = $oItem.ShareName
            $aPrinter[$i][5] = $oItem.Published
            $aPrinter[$i][6] = $oItem.Local
            $aPrinter[$i][7] = $oItem.Location
            $aPrinter[$i][8] = $oItem.DeviceID
            $aPrinter[$i][9] = $oItem.DriverName
            $i += 1
        Next
        Return $aPrinter
         _ArrayDisplay($aPrinter)
    EndFunc
    Alles anzeigen

    Würde mich noch mal über entsprechenden Input freuen

    ein schönes WE noch unbd Danke

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 2. Mai 2023 um 09:32

    Hallo Kanashius,

    recht herzlichen Dank dafür, dass Du Dir die Zeit genommen hast auf meine vielen Fragen zu antworten, ist ja nicht selbstverständlich. Wie gesagt Deine Technik mit der Erstellung der GUI Elemente mittels Array ist durchaus interessant und werde ich mir sicher in meinen nächsten Projekten zu Herzen nehmen. Ausch dass mit der Trennung von Daten und Programminfos ist sicher ein wichtiger Aspekt.

    Ok bei den Enrückungen weiss ich jetzt auch Bescheid, ich will immer alles ganz genau wissen.

    Im Übrigen nutze ich die gleiche AutoIt Version wie Du, ich habe sie extra noch mal neu installiert, um auszuschliessen dass mit den UDFs irgendetwas passiert ist, trotzdem kommt bei mir das Combo Feld nicht, wahrscheinlich mag mein Autoit diese Technik bei diesem Feld wohl doch nicht so ganz ;) Hast du vielleicht an deinen Udfs irgendwas verändert, ich würde gerne Deinen Ansatz übernehmen, wäre aber schade wenn ich dann wireder mischen müsste und das Element herkömlich einfügen müsste.

    Nachtrag: Jetzt ist die Combo da hat geholfen. Nur einen Schönheitsfehler hat das ganze jetzt bei Auswahl eines Netzwerkdruckers aus der Combo wird leider nicht mehr verbunden.

    Du sagst er merkt das, ob ein Drucker aus der "Verbundenen" Liste gewählt wird, wenn man bswpw. Eigenschaften klickt, aber anscheinend sucht er ihn dann doch lokal, dass sieht man am Requester: Auf den Drucker\\N2121\Drucker kann nicht zugegriffen werden, wobei N2121 mein lokales Gerät ist


    Recht schönen Dank noch mal und eine schöne Restwoche

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 1. Mai 2023 um 17:27

    ah ok, ist ein Anhaltspunkt, für so umfangreich hatte ich Autoit gar nicht gehalten;)

    Danke für den Hinweis

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 29. April 2023 um 16:48

    Eine sehr interessante Art und Weise die Buttons zu erzeugen (mit Arrays), wusste ich gar nicht dass das geht, wobei ich mir trotzdem die Frage stelle, ob dass irgendwie einen Geschwindigkeitsvorteil oder so am Ende mitbringt.. Was sich da erst mal mitnehme, ist wohl die Empfehlung, für jede Anweisung eine ID zu vergeben, man weiss ja nie in welcher Form man damit hinterher noch operieren muss. Dass ich das nicht getan habe lag wohl eher daran, dass dieses Modul, und ja es ist Teil eines großen Ganzens, am Anfang nicht so groß gedacht war, und dann natürlich Etrawünsche im Laufe der Zeit dazu kommen.

    Warum dein Code bei mir nicht läuft ist mir aber schleierhaft, dass gab es ja schön öfter hier, vielleicht fehlt mir ja auch eine UDF. Noch eine Interessante Einlassung fand ich deine Bemerkung, dass ich mit GUISetOnEvent eine existierende Haupt Gui weiter bedienbar halte, ist das wirklich so, bisher habe ich immer gelsen, dass Autoi eine solche Multitaskingfähigkeit wohl eher nicht hätte, aber vielleicht war das ja Unsinn, ich lasse mich gerne eines besseren belehren.

    Nachtrag

    Soweit hab ich dein Vorgehen jetzt erst mal verstanden, dass ich um die anderen Sachen am Ende auch noch zu aktualisieren, noch einige Sachen als Funktion auslagern muss war mir schon irgendwie klar, wie gesagt, soweit hate ich am Anfang nicht gedacht. Um Deinen Code mal lauffähig zu machen habe ich den Inhalt deiner Rsestfunktion mal stumpf auskommentiert. Nun bekomm ich Deine GUI geladen, nun fällt auf, dass das Feld mit den verbundenen Druckern schon mal leer bleibt, bei mir sollten hier jedoch 2 vorhanden sein. Möglicherweise hast du win11 (habe noch 10) und du besitzt diesen Key gar nicht mehr. Eine Combo unten taucht gar nicht auf. Somit kann ich natürlich auch nicht testen, ob das mit den Buttons und der unabhängigen Auswahl aus den Listenfeldern wirklich funktioniert, zumal hier noch zu beachten ist, dasbei den Verbundenen Rechnern der Printserver und nicht @local vorangestellt werden muss.

    Nachtrag2

    Ich habe die Funktion _updateConnectedPrinters wieder vollständig drin aber habe die zeile mit dem Ubound nun leicht verändert:

    If UBound($arPrinter)>1 Then _GUICtrlListBox_AddString($idList, $arPrinter[2])

    Dieses führte jetzt zumindest zur Anzeige eines der beiden bei mir verbundenen Druckern, zuätzlich wurden 2 Zahlen im List2 Feld gezeigt. Ein ComboFeld erscheint bei mir aber weiterhin nicht

    Nachtrag3:

    Ok Zeile 232 muss doch heissen Local $arPrinter = StringSplit($sPrinterName, ",", 1+2), jetzt stehen nur die Rechnernamen drin. Haste wahrscheinlich extra reingemacht, damit ich was zum tüfteln habe lach. So mit dem Abwählen der Selektion funktioniert jetzt super, wie gesagt ich muss nun noch irgendwie entscheiden, ob es ein Lokaler Drucker ist oder nicht, da sonst der Druckerstring nur bei den lokalen geht. Warum die Combo nicht will ist mir immer noch rätselhaft

    Btw: Wie kommt man eigentlich darauf, also als mit durchschnittlichr Fantasie ausgestatteter Mensch auf die Idee, dass es eine Funktion Namens _GUICtrlListBox_SetCurSel gibt? Das ist ja wohl hier die eigentliche Lösung meines Problems. Gibbet da irgendwo ein Buch wo sowas drin steht, oder muss man dazu sämtliche UDFs die es so gibbt auswendig kennen lach?

    lg und schönen Abend noch

    PS Ich sehe gerade Deinen Code durch und weiss jetzt wass du mit Einrückungen meintest, ich habe Dir wohl zu viele gemacht, hat etwas gedauert;) Du hast ja so gut wie gar keine. schein wohl Geschmackssache zu sein, mach ich keine, bekomm ich auf den Deckel, mach ich welche krieg ich auch;)

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 29. April 2023 um 13:09

    na umstrukturiert ist gut, hast wohl eher komplett neu geschrieben;) Auf jeden Fall kann ich schon mal sagen, dass es nicht funktioniert, es kommt ein Fehler in Zeile 234 (If UBound...) Error: Array variable has incorrect number of subscript .... Mit Deinen Kritikpunkten hast Du natürlich voll und ganz recht, auch wenn ich nicht ganz nachvozziehen kann, was an meinen Einrückungen zu bemeckern ist, ich wills halt gern nachvollziehen können;)

    So melde mich später wieder

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 29. April 2023 um 13:00

    oh, habe Deinen Beitrag gestern gar nicht mehr gesehen Kanashius, ich schaue mir das nachher mal an, und melde mich dann wieder.

    lg und schönen Samstag noch

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 29. April 2023 um 01:17

    klar kann ich machen, schaut so aus:

    AutoIt
    ; includes ---------------------------------------------------------------------
    #include-once
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <MsgBoxConstants.au3>
    
    ;declaration ---------------------------------------------------------------------------------------------------------------------------------
    Global $BeepFile = 'C:\Windows\Temp\beep.wav'
    Global $BeepFileST = 'C:\Windows\Temp\beeps.wav'
    Global $SubBack = 0x63A0A1
    Global $sCombo, $var, $Drucker
    
    ;---------------------------------------------------------------------------------------------------------------------------------------------
    _form2()
    
    Func _form2();Form 2 (DRUCKER)
     Global $sCombo, $Var
     Global $aList = GetPrinterList()
    
    
     Global $Form2 = GUICreate("DRUCKER ZUWEISEN", 430, 400)
      WinSetOnTop($Form2, "", $WINDOWS_ONTOP)
      GUISetBkColor($SubBack)
      GUISetState(@SW_SHOW)
    
    
    ;Standarddrucker ermitteln
     Local $standardprinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
     $standardprinter = StringSplit($standardprinter, ",")
     $standardprinter = $standardprinter[1]
    
    ;Liste mit installieren Druckern
     Local $idList = GUICtrlCreateList("",10, 80, 280, 120)
       For $i = 1 To 1000
        Local $reg = RegEnumKey( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $i)
         If @error = -1 Then ExitLoop
         GUICtrlSetData(-1, $reg, $standardprinter)
       Next
    
    ;Liste mit verbundenen Druckern
    Local $idList2 = GUICtrlCreateList("", 10, 212, 280, 120)
    For $i = 1 To 100
        Local $reg2 = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $i)
        If @error = -1 Then ExitLoop
        Local $splitReg = StringSplit($reg2, ",")
        If $splitReg[0] > 2 Then
            GUICtrlSetData(-1, $splitReg[4], $standardprinter)
        EndIf
    Next
    
    
    ;Labels
    Local $label
      GUICtrlCreateLabel ( "Standarddrucker: ", 10, 10, 120, 30 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      $label = GUICtrlCreateLabel ( $standardprinter, 10, 30, 360, 30 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( "Installierte Drucker: ", 10, 60, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( "Netzwerkdrucker einbinden: ", 10, 330, 250, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( "Verbundene Drucker: ", 10, 192, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
    
    ;Combo mit Netzwerkdruckern
     $sCombo = GUICtrlCreateCombo("", 10, 350, 280, 50)
      Global $Druckserver = '"\\Druck.vwlt.antrax-berlin.de\'; Druckserver definieren
    Local $Druckername = $aList; Druckernamen aus dem Array extrahieren
      If Not IsArray($aList) Then
        GUICtrlSetData($sCombo, "kein Printserver")
      Else
        For $i = 1 To UBound($aList) - 1
            If $aList[$i][0] <> "" Then $var = GUICtrlSetData($sCombo, $aList[$i][0])
        Next
      EndIf
    
    Local $tabtestdruck = GUICtrlCreateButton ("Testdruck", 300, 90, 100, 30)
    Local $tabdruckereinstellung = GUICtrlCreateButton ("Einstellungen", 300, 140, 100, 30)
    Local $tabdruckereigenschaft = GUICtrlCreateButton ("Eigenschaften", 300, 190, 100, 30)
    Local $tabdruckerfenster = GUICtrlCreateButton ("Warteschlange", 300, 240, 100, 30)
    Local $tabdruckerordner = GUICtrlCreateButton ("Druckerordner", 300, 290, 100, 30)
    Local $Default = GUICtrlCreateButton ("Default", 300,340, 100, 30)
    
    GUISetState(@SW_SHOW)
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
        CASE $GUI_EVENT_CLOSE
          GUIDelete($Form2)
          GUISetState(@SW_ENABLE, $Form2)
          Return
    
         CASE $tabtestdruck
                  SoundPlay($BeepFileST)
                  local $drucker = GUICtrlRead ( $idList )
                  local $instring = StringInStr ( $drucker, "\\")
                  Testdruck()
    
         CASE $tabdruckereinstellung
                  SoundPlay($BeepFileST)
                MsgBox('262144', "geklickt", GUICtrlRead ( $idList ))  
                  local $drucker = GUICtrlRead ( $idList )
                  local $instring = StringInStr ( $drucker, "\\")
                  DruckerEinstellung()
    
         CASE $tabdruckereigenschaft
                  SoundPlay($BeepFileST)
                  ;if idList ="" then guiread idlist2 server = Printserver
                    ;If $idList = "" THEN
                     ;MsgBox(262144,"Title", "Text")
                    ;Else
                     global $drucker = GUICtrlRead ( $idList )
                     global $instring = StringInStr ( $drucker, "\\")
                     DruckerEigenschaft()
                    ;EndIf
         CASE $tabdruckerfenster
                  SoundPlay($BeepFileST)
                  $drucker = GUICtrlRead ( $idList )
                  $instring = StringInStr ( $drucker, "\\")
                  DruckerFenster()
    
         CASE $tabdruckerordner
                  SoundPlay($BeepFileST)
                  global $drucker = GUICtrlRead ( $idList )
                  $instring = StringInStr ( $drucker, "\\")
                  druckerordner()
    
         CASE $default ;Anführungsstriche für leerzeichenstrings
                  SoundPlay($BeepFileST)
                  $drucker = GUICtrlRead ( $idList )
                  $drucker = '"' & $drucker & '"'
                  RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $Drucker)
                  
                $standardprinter = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
                $standardprinter = StringSplit($standardprinter, ",")
                $standardprinter = $standardprinter[1]
                GUICtrlSetData($label, $standardprinter) ; aktualisiert das Label $Standardprinter
                 
    
          Case $sCombo
              Local $sText = GUICtrlRead($sCombo)
                  RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & $Druckserver & $sText)
               RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "  & $Druckserver & $sText)
                MsgBox('262144', "Default printer", "Default printer set to: " & $sText)
    
         EndSwitch
     WEnd
    EndFunc
    
    
    
    Func GetPrinterList()
        If Not FileExists("\\Druck.larch.verwalt-berlin.de\c$") Then
            GUICtrlSetData($sCombo, "kein Printserver")
            Return 0
        EndIf
    
        Local $objWMIService = ObjGet("winmgmts:\\" & "Druck.vwlt.antrax-berlin.de" & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
        If Not IsObj($colItems) Then Exit MsgBox(0, "", "Not an object")
        If Not $colItems.count Then Return 0 ; No Printer found
        Local $aPrinter[$colItems.count][10], $i = 0
        For $oItem In $colItems
            $aPrinter[$i][0] = $oItem.Name
            $aPrinter[$i][1] = $oItem.DriverName
            $aPrinter[$i][2] = $oItem.PortName
            $aPrinter[$i][3] = $oItem.Shared
            $aPrinter[$i][4] = $oItem.ShareName
            $aPrinter[$i][5] = $oItem.Published
            $aPrinter[$i][6] = $oItem.Local
            $aPrinter[$i][7] = $oItem.Location
            $aPrinter[$i][8] = $oItem.DeviceID
            $aPrinter[$i][9] = $oItem.DriverName
            $i += 1
        Next
        Return $aPrinter
    EndFunc
    
    
    ; Funktion zum Festlegen des Standarddruckers definieren
    Func SetDefaultPrinter($printerName)
        Local $aRet = DllCall("winspool.drv", "bool", "SetDefaultPrinter", "wstr", $printerName)
        If @error Then Return SetError(@error, @extended, False)
        Return $aRet[0]
    EndFunc
    
    
    
    
    ;------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ;DRUCKER FUNCTIONS
    ;------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    
    
    Func DruckerFenster()
        If $drucker == "" Then
            MsgBox(16,"Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        Else
            $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /o" )
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o" )
        EndIf
    EndFunc
    
    Func DruckerEigenschaft()
      MsgBox(262144,"Title", $Drucker)
        If $drucker == "" Then
            MsgBox(16,"Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
         Local $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /p" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p" )
        EndIf
    EndFunc
    
    Func DruckerEinstellung()
    
        If $drucker = "" Then
            MsgBox(16,"Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        Local  $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /e" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e" )
        EndIf
    EndFunc
    
    Func Testdruck()
        If $drucker == "" Then
            MsgBox(16,"TestDruck", "Es wurde kein Drucker ausgewählt!")
         Local $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /k" )
            MsgBox('262144', "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('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc
    Alles anzeigen

    ein schönes WE

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 28. April 2023 um 20:29

    Vielleicht darf ich in diesem Zusammenhang noch eine Frage stellen, vielleicht etwas kniffliger. Eigentlich wollte ich der Übersichtlichheit die lokalen und die verbundenen Drucker getrennt darstellen, wahrscheinlich macht das das Problem. Ich habe nämlich versucht die Button nicht nur auf das obere Fenster anzuwenden, sondern auch auf das untere, aber dass wird wohl nicht so einfach gehen oder? , schon weil wenn man einmal im oberen Fenster was ausgewählt hat diese Markierung nicht mehr gelöscht kriegt, bzw dann 2 hat, eine im oberen, eine im unteren Fenster. Ich hoffe ihr versteht was ich meine.

    lg und schönen Abend noch mal

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 28. April 2023 um 20:07

    Wow, dass war es ja, ich musste das CreateLable extra als Variable einführen, hatte ich ganz verpeilt, hoffe ich merk mir das jetzt endlich,

    Recht herzlichen Dank noch mal und ein schönes Wocheende

  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 28. April 2023 um 17:13

    jo danke erstmal, das habe ich schon alles vesucht, mit und ohne -1, zuletzt sag die Case Anweisung, wo er ja dann aktualisieren soll, so aus:

    AutoIt
         CASE $default 
                
                $drucker = GUICtrlRead ( $idList )
                $drucker = '"' & $drucker & '"'
                RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $Drucker)
                  
                $standardprinter = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
                $standardprinter = StringSplit($standardprinter, ",")
                $standardprinter = $standardprinter[1]
    
                GUICtrlSetData($standardprinter, $standardprinter) ; aktualisiert das Label $Standardprinter
    Alles anzeigen
  • Labelaktualisierung will wieder mal nicht

    • casi4712
    • 28. April 2023 um 15:18

    Hallo liebe Forengemeinde,

    ich habe mal wieder ein fachliches Problem. Ich habe ein kleines Druckermodul gescriptet, welches mir getrennt nach Netzwerk/lokal die installieten Drucker anzeigt, und vorhandene Netzwerkdrucker zum einbinden bereit hält. Soweit klappt schon alles prima, eigentlich dachte ich ich hätte den schwierigsten Teil hinter mir, jetzt bekomme ich es ums Verrecken wiede nicht hin, das Label $Standardpronter zu aktualisieren bei Case = default. Vielleicht kann mir ja einer auf die Spünge helfen. Mein kleines DruckerScript schaut so aus:

    AutoIt
    _form2()
    
    Func _form2();Form 2 (DRUCKER)
     Global $sCombo, $Var
     Global $aList = GetPrinterList()
    
    
    global $Form2 = GUICreate("DRUCKER ZUWEISEN", 430, 400)
      WinSetOnTop($Form2, "", $WINDOWS_ONTOP)
      GUISetBkColor($SubBack)
      GUISetState(@SW_SHOW)
    
    
    ;Standarddrucker ermitteln
     Local $standardprinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
     $standardprinter = StringSplit($standardprinter, ",")
     $standardprinter = $standardprinter[1]
    
    ;Liste mit installieren Druckern
     Local $idList = GUICtrlCreateList("",10, 80, 280, 120)
       For $i = 1 To 1000
        Local $reg = RegEnumKey( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $i)
         If @error = -1 Then ExitLoop
         GUICtrlSetData(-1, $reg, $standardprinter)
       Next
    
    ;Liste mit verbundenen Druckern
    Local $idList2 = GUICtrlCreateList("", 10, 212, 280, 120)
    For $i = 1 To 100
        Local $reg2 = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $i)
        If @error = -1 Then ExitLoop
        Local $splitReg = StringSplit($reg2, ",")
        If $splitReg[0] > 2 Then
            GUICtrlSetData(-1, $splitReg[4], $standardprinter)
        EndIf
    Next
    
    
    ;Labels
      GUICtrlCreateLabel ( "Standarddrucker: ", 10, 10, 120, 30 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( $standardprinter, 10, 30, 360, 30 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( "Installierte Drucker: ", 10, 60, 120, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
      GUICtrlCreateLabel ( "Netzwerkdrucker einbinden: ", 10, 330, 250, 20 )
       GUICtrlSetFont(-1, 9, 900) ; bold
    
    ;Combo mit Netzwerkdruckern
     $sCombo = GUICtrlCreateCombo("", 10, 350, 280, 50)
      Global $Druckserver = '"\\Druck.vwlt.antrax-berlin.de\'; Druckserver definieren
    Local $Druckername = $aList; Druckernamen aus dem Array extrahieren
      If Not IsArray($aList) Then
        GUICtrlSetData($sCombo, "kein Printserver")
      Else
        For $i = 1 To UBound($aList) - 1
            If $aList[$i][0] <> "" Then $var = GUICtrlSetData($sCombo, $aList[$i][0])
        Next
      EndIf
    
    Local $tabtestdruck = GUICtrlCreateButton ("Testdruck", 300, 90, 100, 30)
    Local $tabdruckereinstellung = GUICtrlCreateButton ("Einstellungen", 300, 140, 100, 30)
    Local $tabdruckereigenschaft = GUICtrlCreateButton ("Eigenschaften", 300, 190, 100, 30)
    Local $tabdruckerfenster = GUICtrlCreateButton ("Warteschlange", 300, 240, 100, 30)
    Local $tabdruckerordner = GUICtrlCreateButton ("Druckerordner", 300, 290, 100, 30)
    Local $Default = GUICtrlCreateButton ("Default", 300,340, 100, 30)
    
    GUISetState(@SW_SHOW)
    
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
        CASE $GUI_EVENT_CLOSE
          GUIDelete($Form2)
          GUISetState(@SW_ENABLE, $Form2)
          Return
    
         CASE $tabtestdruck
                  SoundPlay($BeepFileST)
                  local $drucker = GUICtrlRead ( $idList )
                  local $instring = StringInStr ( $drucker, "\\")
                  Testdruck()
    
         CASE $tabdruckereinstellung
                  SoundPlay($BeepFileST)
                MsgBox('262144', "geklickt", GUICtrlRead ( $idList ))  
                  local $drucker = GUICtrlRead ( $idList )
                  local $instring = StringInStr ( $drucker, "\\")
                  DruckerEinstellung()
    
         CASE $tabdruckereigenschaft
                  SoundPlay($BeepFileST)
                  ;if idList ="" then guiread idlist2 server = Printserver
                    ;If $idList = "" THEN
                     ;MsgBox(262144,"Title", "Text")
                    ;Else
                     global $drucker = GUICtrlRead ( $idList )
                     global $instring = StringInStr ( $drucker, "\\")
                     DruckerEigenschaft()
                    ;EndIf
         CASE $tabdruckerfenster
                  SoundPlay($BeepFileST)
                  $drucker = GUICtrlRead ( $idList )
                  $instring = StringInStr ( $drucker, "\\")
                  DruckerFenster()
    
         CASE $tabdruckerordner
                  SoundPlay($BeepFileST)
                  global $drucker = GUICtrlRead ( $idList )
                  $instring = StringInStr ( $drucker, "\\")
                  druckerordner()
    
         CASE $default ;Anführungsstriche für leerzeichenstrings
                  SoundPlay($BeepFileST)
                  $drucker = GUICtrlRead ( $idList )
                  $drucker = '"' & $drucker & '"'
                  RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $Drucker)
                  
                $standardprinter = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
                $standardprinter = StringSplit($standardprinter, ",")
                $standardprinter = $standardprinter[1]
                GUICtrlSetData(-1, $standardprinter, $standardprinter) ; aktualisiert das Label $Standardprinter
                 
    
          Case $sCombo
              Local $sText = GUICtrlRead($sCombo)
                  RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n  " & $Druckserver & $sText)
               RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "  & $Druckserver & $sText)
                MsgBox('262144', "Default printer", "Default printer set to: " & $sText)
    
         EndSwitch
     WEnd
    EndFunc
    
    
    
    Func GetPrinterList()
        If Not FileExists("\\Druck.vwlt.antrax-berlin.de\c$") Then
            GUICtrlSetData($sCombo, "kein Printserver")
            Return 0
        EndIf
    
        Local $objWMIService = ObjGet("winmgmts:\\" & "Druck.vwlt.antrax-berlin.de" & "\root\CIMV2")
        Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
        If Not IsObj($colItems) Then Exit MsgBox(0, "", "Not an object")
        If Not $colItems.count Then Return 0 ; No Printer found
        Local $aPrinter[$colItems.count][10], $i = 0
        For $oItem In $colItems
            $aPrinter[$i][0] = $oItem.Name
            $aPrinter[$i][1] = $oItem.DriverName
            $aPrinter[$i][2] = $oItem.PortName
            $aPrinter[$i][3] = $oItem.Shared
            $aPrinter[$i][4] = $oItem.ShareName
            $aPrinter[$i][5] = $oItem.Published
            $aPrinter[$i][6] = $oItem.Local
            $aPrinter[$i][7] = $oItem.Location
            $aPrinter[$i][8] = $oItem.DeviceID
            $aPrinter[$i][9] = $oItem.DriverName
            $i += 1
        Next
        Return $aPrinter
    EndFunc
    
    
    ;------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ;DRUCKER FUNCTIONS
    ;------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc
    
    
    
    Func DruckerFenster()
        If $drucker == "" Then
            MsgBox(16,"Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        Else
            $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /o" )
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o" )
        EndIf
    EndFunc
    
    Func DruckerEigenschaft()
      MsgBox(262144,"Title", $Drucker)
        If $drucker == "" Then
            MsgBox(16,"Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
         Local $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /p" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p" )
        EndIf
    EndFunc
    
    Func DruckerEinstellung()
    
        If $drucker = "" Then
            MsgBox(16,"Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        Local  $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /e" )
        Else
            RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e" )
        EndIf
    EndFunc
    
    Func Testdruck()
        If $drucker == "" Then
            MsgBox(16,"TestDruck", "Es wurde kein Drucker ausgewählt!")
         Local $instring = 0
            RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /k" )
            MsgBox('262144', "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('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc
    Alles anzeigen
  • Endlosschleife funktioniert nicht mehr ab gewisser Zeit

    • casi4712
    • 12. April 2023 um 08:22

    okay, danke schonmal für den Input,

    also dass Computer auch nur menschen sind klingt schon mal intuitiv einleuchtend;) Ich werde erst mal mit der (100) versuchen, ich nehme an damit ist das Intervall erst ein mal herabgesetzt. Dann schaue ich was passiert. Wenns dann noch nicht gehr schaue ich mal wegen errorwert, bzw. wie ich da ran komme.


    lg und einen schönen Tag noch

  • Endlosschleife funktioniert nicht mehr ab gewisser Zeit

    • casi4712
    • 11. April 2023 um 18:56

    Hallo allerseits,

    ich stehe mal wieder vor einem Phänomen, welches ich mir nicht erklären kann. Es geht um ein kleines Automatisierungsscript welches, bei einem vorhandenen VPN Zertifikat eine Verbindung hestellt und dann eine RDP Verbindung. Beim Abbau der RDP Verbindung wird die VPN Verbindung wieder gekappt. Dieses geschieht ganz simpel über eine Endlos Schleife die checkt ob das RDP Programm geöffnet ist. Nun funktioniert eigentlich super, aber nur wenn ich die Terminal Session unter 20 Minuten halte, sobald die Session über 20 Minuten ist, habe das jetzt oft genug getestet, kappt er die VPN Verbindung nicht mehr. Auch wenn dies jetzt keiner ausprobieren kann, ohne entsprechende VPN Zertifikat, vielleicht fällt ja doch kemanden etwas schlaues dazu ein;)

    Das Script sieht so aus:

    AutoIt
    #include <Constants.au3>
    TraySetIcon("certmgr.dll",-13)
    
    $g_szVersion = "My Script 1.1"
    If WinExists($g_szVersion) Then Exit ; It's already running
    AutoItWinSetTitle($g_szVersion)
    
    ;Cisco Pfad
    $ProgramFileDir = "c:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\"
    
    ;ciscolauner quit wenn läuft
    $prg = "vpnui.exe"
       If ProcessExists($prg) Then ; Check if the Notepad process is running.
             ProcessClose($prg)
       Else
       EndIf
     $list = ProcessList("vpncli.exe")
     for $i = 1 to $list[0][0]
       ProcessClose( $list[1][1] )
     Next
    
    
    
    ;DOMAINCHECK; wenn Domäne kein VPN
    global $var = Ping("192.168.100.66")
     If @error = 0 Then
      $vpn = "0" ;kein VPN nötig
     Else
       $vpn = "1" ;VPN nötig
      EndIf
    
    
    ;Connect any already established session (Ausserhalb)
        IF $vpn = "1"  Then
          SplashTextOn('', 'VPN und Terminal- Verbindung wird hergestellt', 300, 60, -1, -1, $DLG_NOTITLE)
          Sleep(5000)
          SplashOff()
    
        $cmd = Run($ProgramFileDir & "vpncli.exe connect 140.66.124.23:443", @WindowsDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
    
    ; Wait for the Y/N prompt to appear
          StdinWrite($CMD, "y")
          StdinWrite($CMD)
    
          SplashTextOn('', '"VPN und Terminal- Verbindung wurde hergestellt"', 300, 60, -1, -1, $DLG_NOTITLE)
          Sleep(1000)
          SplashOff()
        ELSE
            $cmd = Run("mstsc /v:la-fire02", @WindowsDir, @SW_HIDE)
        EXIT
        ENDIF
    
    ;Verbinden mit Terminal
        sleep(10000)
        $cmd = Run("mstsc /v:10.44.244.11", @WindowsDir, @SW_SHOW)
    
    
    ;Programm so lange offen halten bis
     WHILE 1
        IF ProcessExists ( "mstsc.exe" ) = 0 then 
           SplashTextOn('', 'Abbau der VPN Verbindung', 300, 50, -1, -1, $DLG_NOTITLE)
           Sleep(3000)
           SplashOff()
          $cmd = RunWait($ProgramFileDir & "vpncli.exe disconnect", @WindowsDir, @SW_HIDE)
            EXITLOOP
            $cmd = RunWait($ProgramFileDir & "vpncli.exe disconnect", @WindowsDir, @SW_HIDE)
            EXIT
       
        ENDIF
     WEND
           splashTextOn('', 'Ende der TerminalSession', 300, 50, -1, -1, $DLG_NOTITLE)
           Sleep(3000)
           SplashOff()
    EXIT
    Alles anzeigen


    lg und schöne Woche noch

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™