Labelaktualisierung will wieder mal nicht

  • Ich hab selbst keinen echten Drucker (nur Software wie Adobe PDF), kann dir da also leider nicht weiterhelfen :(

    Deshalb hab ich bei dem Drucker-Zeug eigentlich nur deinen Code genommen und wiederverwendet (und reduntantes rausgenommen; Das waren aber nur String Ersetzungen).

    GGf. ersetz mal alle Run commands mit nem Consolewrite und vergleich die Ausgabe, die der Code jetzt gibt, mit der, die der Code vorher gegeben hat.

    Dann siehst du die Unterschiede und man kann das Beheben.

  • 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

    Einmal editiert, zuletzt von casi4712 (10. Mai 2023 um 15:48)

  • 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

  • Tip mit ConsoleWrite

    Da man mit dem Verketten von Strings und den notwendigen Anführungszeichen leicht mal daneben greift, bevorzuge ich StringFormat.

    AutoIt
    $sPrintServer = 'PRINT:SERVER'
    $sText = 'TEXT'
    
    ConsoleWrite(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & "\\" & $sPrintServer & "\" & $sText & '"' & @CRLF)
    
    ; mit Stringformat muss "\" maskiert werden, also immer doppelt 
    ConsoleWrite(StringFormat('%s\\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "\\\\%s\\%s"', @SystemDir, $sPrintServer, $sText) & @CRLF)

    Eine weitere vereinfachende Schreibmöglichkeit ist: AutoItSetOption "ExpandVarStrings".

  • Naja, wenn man generell ' anstatt " nutzt, finde ich ist es wesentlich einfacher:

    AutoIt
    $sPrintServer = 'PRINT:SERVER'
    $sText = 'TEXT'
    
    ConsoleWrite(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & "\\" & $sPrintServer & "\" & $sText & '"' & @CRLF)
    
    ; mit Stringformat muss "\" maskiert werden, also immer doppelt 
    ConsoleWrite(StringFormat('%s\\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "\\\\%s\\%s"', @SystemDir, $sPrintServer, $sText) & @CRLF)
    
    ; generell ' nutzen ansatt ", das man ' in einem Pfad-String braucht ist eher unwahrscheinlich und man braucht kaum wechseln und auch keine Maskierung
    ConsoleWrite(@SystemDir & '\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n "\\' & $sPrintServer & '\' & $sText & '"' & @CRLF)

    Ich fahre seit dem Wechsel von ' auf " wesentlich besser aber das ist ein wenig Geschmackssache.

  • 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:

    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

    5 Mal editiert, zuletzt von casi4712 (12. Mai 2023 um 16:57)

  • 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:

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

  • 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

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

    LG und einen schönen Sonntag noch;)

    Einmal editiert, zuletzt von casi4712 (21. Mai 2023 um 14:27)

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

    Frohe Pfingsten