Einfache Druckerauswahlliste

  • Hallo Zusammen,

    meiner einer muss (immer) noch ein AutoIt Frontend (weiter)entwickeln, welches Daten in Excel files schreibt und nach bedarf diese Tabelle druckt.
    So schön so gut dank Excel UDF und euerer Hilfe bei der GUI klappt das auch prima :)

    Das Problem ist nun, dass z.Z. der ausdruckt nur über den Systemstandarddrucker erfolgt. "Der Chef" [tm] aber möchte das er den Drucker wie üblich auch in der Anwendung definieren kann, meine Frage deshalb, gibt es da einfache Möglichkeiten evtl. über System COM Objekte den gewünschten Drucker "schön" einzustellen?

    Vielen Dank für die Hilfe. Mit freundlichen Grüßen
    Lutz

    Einmal editiert, zuletzt von uuchip (5. März 2008 um 19:39)

  • eine einfache drucker auswahl reicht aber, keine einstellungen, etc. oder

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Sorry, da fällt mir so spontan nix ein, dachte an sowas wie eine DropDown Liste, das wäre wohl auf die schnelle hin zu bekommen, aber den normalen Dialog aufrufen. Es geht mit Sicherheit also lasse ich mal die Profis ran :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Sorry, da fällt mir so spontan nix ein, dachte an sowas wie eine DropDown Liste, das wäre wohl auf die schnelle hin zu bekommen, aber den normalen Dialog aufrufen. Es geht mit Sicherheit also lasse ich mal die Profis ran :)

    Wenn es mit einer DropDown funktioniert, warum denn nicht? Wenn Du so freunflich wärst die Lösung zu posten?
    Vielen Dank
    Lutz

    P.S.: Ich dachte sowas wie ein Druckerdialog wäre in Windows bzw. AutoIteingebaut? Über die rundll32 printui.dll,PrintUIEntry usw. einen Wolf zu programmieren wäre wohl die zweitbeste Lösung ;)

  • Heute werde ich das wohl nicht mehr schaffen, mein Ansatz wäre gewesen:
    1. Std. Drucker auslesen und merken
    2. Alle vorhandenen Drucker auslesen und in einer DropDown Liste anzeigen (WMI)
    3. Wenn sich die Auswahl ändert, den Std. Drucker neu setzen (auf den ausgewählten)
    4. Drucken so wie du es jetzt auch machst, schätze über diese excel.au3 oder wie die udf heißen mag
    5. Wenn gedruckt/GUI geschlossen, dann Standartdrucker wieder zurück setzen

    vielleicht hat ja jemand noch eine andere Idee oder möchte das mal umsetzen.


    [EDIT]
    Das hier ist mir so spontan noch grade eingefallen:

    Spoiler anzeigen
    [autoit]

    #Include <WinAPI.au3>
    #Include <Array.au3>

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

    Local $arrayPrinter[1]
    Local $stdPrinter = ''
    Local $File = 'c:\boot.ini'

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

    _GetPrinterWMI($arrayPrinter)
    _ArrayDisplay($arrayPrinter)
    _print('c:\boot.ini','Microsoft Office Document Image Writer')

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

    Func _print($datei = $File,$drucker = $stdPrinter)
    _WinAPI_SetDefaultPrinter($drucker)
    RunWait('notepad /p ' & $datei,@TempDir,@SW_HIDE)
    _WinAPI_SetDefaultPrinter($stdPrinter)
    EndFunc

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

    Func _GetPrinterWMI(ByRef $arrayPrinter)
    ReDim $arrayPrinter[1]
    Dim $Obj_WMIService = ObjGet('winmgmts:\\' & @ComputerName & '\root\cimv2')

    If (IsObj($Obj_WMIService)) And (Not @error) Then
    Dim $Col_Items = $Obj_WMIService.ExecQuery('Select * from Win32_Printer')

    Local $Obj_Item
    For $Obj_Item In $Col_Items
    If $Obj_Item.Default = -1 Then
    $stdPrinter = $Obj_Item.DeviceID
    $arrayPrinter[0] = $Obj_Item.DeviceID
    Else
    _ArrayAdd($arrayPrinter,$Obj_Item.DeviceID)
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    Einmal editiert, zuletzt von McPoldy (5. März 2008 um 15:53)

  • Moin McPoldi,

    vielen dank für das Stück Source. Kann meiner einer gut gebrauchen, ich schmeiss die Ausgabe in eine Combo der Anwender Wählt den Drucker aus und gut is. :)

    tschöö mit öö
    Lutz

    P.S.: Was ich immer scho mal sagen wollte, das Sprachkonzept von Autoit3 ist sagen wir mal so ca. 25 Jahre alt. Sriptsprachen wie Ruby oder Phyton usw. sind in meinen Agen um einiges moderner, ABER die Unterstützung hier ist so gut, dass Autoit meine erste Wahl ist.

    • Offizieller Beitrag
    Zitat

    P.S.: Was ich immer scho mal sagen wollte, das Sprachkonzept von Autoit3 ist sagen wir mal so ca. 25 Jahre alt. Sriptsprachen wie Ruby oder Phyton usw. sind in meinen Agen um einiges moderner, ABER die Unterstützung hier ist so gut, dass Autoit meine erste Wahl ist.

    Konzepte sind meiner Meinung nach nie schlecht weil sie alt sind...
    Konzepte passen für bestimmte Fälle oder sie passen sind. Ich kann mit keiner Sprache so schnell kleine Anwendungen schreiben wie mit AutoIt. Ich kann aber auf der anderen Seite mit AutoIt nie die Komplexität von z.B. Java-Programmen (Stichwort OOP) erreichen.

    Die Kunst ist nur die richtige Sprache (Konzept) für das Problem auszuwählen :).

    peethebee

  • Moin Moin peethebee,

    Du hast recht, nicht alle Sprachen sind für alle Anwendungen gleich gut geeignet. Bei einer Skriptsprache muss in meinen Augen auch nicht unbedingt OPP eingebaut sein, aber wg. der Übersichtlichkeit wäre sowas wie Records ala Pascal, wenn auch ohne Typdefinition schon recht hilftreich für die einfache Programmierung wo man dann nicht dauernd die indizes der arrays nachhalten muss.
    (Einfache Records kann man sich wie einen Datenverbund vorstellen wie z.B.
    $mensch[1].vorname = "Otto"
    $mensch[1].nachname = "Walkes"
    )

    Achso und ein execute() was mehr als eine Zeile frisst bzw. auch *.au3 files wäre auch vom feinsten.

    Einen schönen Tag wünscht
    Lutz


    Konzepte sind meiner Meinung nach nie schlecht weil sie alt sind...
    Konzepte passen für bestimmte Fälle oder sie passen sind. Ich kann mit keiner Sprache so schnell kleine Anwendungen schreiben wie mit AutoIt. Ich kann aber auf der anderen Seite mit AutoIt nie die Komplexität von z.B. Java-Programmen (Stichwort OOP) erreichen.

    Die Kunst ist nur die richtige Sprache (Konzept) für das Problem auszuwählen :).

    peethebee