Verfügbare Papierfachcodes von Drucker ermitteln

  • Hallo zusammen,

    ich verwende folgenden Code um an die Namen bzw. die Bezeichnungen der Papierfächer für den Standarddrucker zu kommen.

    Spoiler anzeigen
    [autoit]


    Const $DC_BINS = 6
    Const $DC_BINNAMES = 12
    Dim $BinNameList

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

    $strComputer = "."
    $objWMIService = ObjGet ("winmgmts:\" & $strComputer & "\root\cimv2")
    $colInstalledPrinters = $objWMIService.ExecQuery ("Select * From Win32_Printer Where Default = True")
    For $objPrinter In $colInstalledPrinters
    $result = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_BINS, "str", $BinNameList, "long", 0)
    $s_struct = ""
    For $i = 1 To $result[0]
    $s_struct = $s_struct & "char[24];"
    Next
    $s_struct = StringTrimRight($s_struct, 1)
    $struct = DllStructCreate($s_struct)
    $result2 = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_BINNAMES, "ptr", DllStructGetPtr($struct), "long", 0)
    For $i = 1 To $result[0]
    ;~ MsgBox(0, "Papierfach", DllStructGetData($struct, $i))
    ConsoleWrite(DllStructGetData($struct, $i) & @CRLF)
    Next
    $struct = 0
    Next

    [/autoit]


    Zusätzlich hätte ich noch gerne den Fachcode ermittelt, wie es zum bsp. Word über "Seite einrichten" bei der Makroaufzeichnung generiert.
    Als Bsp.von einem HP LJ4250
    15 Automatisch auswählen
    262 Drucker autom. Auswahl
    258 Man. Zufuhr in Fach 1
    259 Fach 1
    260 Fach 2
    261 Fach 3
    262 Fach 4

    Kennt jemand eine Möglichkeit diese Fachcodes zu ermitteln?

    MfG Maxxer

  • Danke für das Code Beispiel, das veranschaulicht es sehr gut. An die Fachcodes kommt man damit aber auch nicht ran.
    Evtl. hab ich mich aber auch nicht deutlich genug ausgedrückt. Über Word möcht ich das nicht lösen. Word war nur als Bsp. gedacht, weil Word den Fachcode für jeden der bisher getesteten Drucker und Fächer richtig auslesen konnte. Ich weiß nur noch nicht, woher Word sich die Info holt.
    Wie aus deinem Bsp. zu sehen ist, möchte ich der

    [autoit]

    Global Const $wdPrinterDefaultBin = 0 ; 0 = Standardfach

    [/autoit]


    den Fachcodewert z.b. 259

    [autoit]

    Global Const $wdPrinterDefaultBin = 259 ; 259 = Fach 1

    [/autoit]


    zuweisen.

  • hallo Maxxer,

    wir hatten auch schon mal so ein problem, bei druckern mit mehreren fächern!
    ich habe dann den drucker einfach für jedes fach nochmal dem printserver z.b. als HP Laserjet Fach 1 und HP Laserjet Fach 2 angelegt.

    wenn ich nach "change paper tray" oder "set paper tray" kommt einiges ..ob das jetzt für dich passend ist, musst du mal schauen :)

    https://github.com/frogmore/print…ript%20file.vbs

    eventuell hat hier Water noch ne idee, er hat ja im engl. Forum gepostet ...

    gruß gmmg

    Einmal editiert, zuletzt von gmmg (12. März 2014 um 10:09)