none
Papierfach von Drucker auswählen

    Frage

  • Hallo,

    in meiner A03-Anwendung habe ich einen Drucken-Dialog programmiert, bei dem bei unserem alten Drucker (Canon-IR-3100-C) je nach gewähltem Geschäftspapier die verschiedenen Kassetten auswählt wurden (repSV.printer.paperbin = 1 oder 2 u.s.w.)

    Nun haben wir neue Drucker bekommen (Develop ineo+ 452) und das ganze funktioniert nicht mehr. Wie bekomme ich raus, welches Papierfach dort welche Nummer hat? Oder wie kann ich hier vorgehen?

    Danke + Gruß

    Roland

    Freitag, 6. Januar 2012 17:14

Antworten

  • Hallo,

    Roland Klassen wrote:

    [...] Nun haben wir neue Drucker bekommen (Develop ineo+ 452) und das
    ganze funktioniert nicht mehr. Wie bekomme ich raus, welches Papierfach
    dort welche Nummer hat? Oder wie kann ich hier vorgehen?

    Probier mal damit (kompletten Code in ein neues Modul kopieren):

     

    Private Declare Function DeviceCapabilities Lib "winspool.drv" _
       Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, _
       ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _
       ByVal dev As Long) As Long
    
    Private Const DC_BINS = 6
    Private Const DC_BINNAMES = 12
    
    Private Sub FeedsLesen()
     Dim Prn As Printer
     Dim dwBins As Long
     Dim I As Long
     Dim strNames As String
     Dim strNext As String
     Dim intNum() As Integer
    
     For Each Prn In Printers
       dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                DC_BINS, ByVal vbNullString, 0)
       If dwBins > 0 Then
         ReDim intNum(1 To dwBins)
         strNames = String(24 * dwBins, 0)
         dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                  DC_BINS, intNum(1), 0)
         dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                  DC_BINNAMES, ByVal strNames, 0)
         Debug.Print Prn.DeviceName
         For I = 1 To dwBins
           strNext = Mid(strNames, 24 * (I - 1) + 1, 24)
           strNext = Left(strNext, InStr(1, strNext, Chr(0)) - 1)
           strNext = String(6 - Len(CStr(intNum(I))), " ") & _
                     intNum(I) & " " & strNext
           Debug.Print strNext
         Next I
       Else
         Debug.Print Prn.DeviceName & " hat keine Feeds."
       End If
     Next Prn
    End Sub
    

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com



    Dienstag, 10. Januar 2012 11:09
    Moderator

Alle Antworten

  • Am 06.01.2012 schrieb Roland Klassen:

    in meiner A03-Anwendung habe ich einen Drucken-Dialog programmiert, bei dem bei unserem alten Drucker (Canon-IR-3100-C) je nach gewähltem Geschäftspapier die verschiedenen Kassetten auswählt wurden (repSV.printer.paperbin = 1 oder 2 u.s.w.)

    Nun haben wir neue Drucker bekommen (Develop ineo+ 452) und das ganze funktioniert nicht mehr. Wie bekomme ich raus, welches Papierfach dort welche Nummer hat? Oder wie kann ich hier vorgehen?

    Du kannst in Word ein Makro aufzeichnen. Damit kommst Du an die
    Nummern. Aufzeichnung starten, STRG + P aufrufen, Seite einrichten
    aufrufen und hier wählen, erste Seite und weitere Seiten.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/
    Reg2xml:  http://www.reg2xml.com - Registry Export File Converter

    Freitag, 6. Januar 2012 18:18
  • in meiner A03-Anwendung habe ich einen Drucken-Dialog programmiert, bei dem bei unserem alten Drucker (Canon-IR-3100-C) je nach gewähltem Geschäftspapier die verschiedenen Kassetten auswählt wurden (repSV.printer.paperbin = 1 oder 2 u.s.w.)

    Nun haben wir neue Drucker bekommen (Develop ineo+ 452) und das ganze funktioniert nicht mehr. Wie bekomme ich raus, welches Papierfach dort welche Nummer hat? Oder wie kann ich hier vorgehen?

        Du kannst in Word ein Makro aufzeichnen. Damit kommst Du an die
        Nummern. Aufzeichnung starten, STRG + P aufrufen, Seite einrichten
        aufrufen und hier wählen, erste Seite und weitere Seiten.

    Hat (beinahe) funktioniert. Die Makro-Aufzeichnung lief gut, habe aus allen drei infrage kommenden Fächern gedruckt, dies hat auch zunächst geklappt. Dann gucke ich im Makro-Code, wo allerhand Einstellungen am Drucker vorgenommen werden, jedoch nicht eine PaperBin oder ähnliches...!? Als ich das Makro dann laufen lasse, kommen alle Seiten auch aus dem selben (zu letzt aktiven) Fach...! Was weiter tun...?

    Danke + Gruß

    Roland

    Dienstag, 10. Januar 2012 09:17
  • Hallo,

    Roland Klassen wrote:

    [...] Nun haben wir neue Drucker bekommen (Develop ineo+ 452) und das
    ganze funktioniert nicht mehr. Wie bekomme ich raus, welches Papierfach
    dort welche Nummer hat? Oder wie kann ich hier vorgehen?

    Probier mal damit (kompletten Code in ein neues Modul kopieren):

     

    Private Declare Function DeviceCapabilities Lib "winspool.drv" _
       Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, _
       ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _
       ByVal dev As Long) As Long
    
    Private Const DC_BINS = 6
    Private Const DC_BINNAMES = 12
    
    Private Sub FeedsLesen()
     Dim Prn As Printer
     Dim dwBins As Long
     Dim I As Long
     Dim strNames As String
     Dim strNext As String
     Dim intNum() As Integer
    
     For Each Prn In Printers
       dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                DC_BINS, ByVal vbNullString, 0)
       If dwBins > 0 Then
         ReDim intNum(1 To dwBins)
         strNames = String(24 * dwBins, 0)
         dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                  DC_BINS, intNum(1), 0)
         dwBins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                  DC_BINNAMES, ByVal strNames, 0)
         Debug.Print Prn.DeviceName
         For I = 1 To dwBins
           strNext = Mid(strNames, 24 * (I - 1) + 1, 24)
           strNext = Left(strNext, InStr(1, strNext, Chr(0)) - 1)
           strNext = String(6 - Len(CStr(intNum(I))), " ") & _
                     intNum(I) & " " & strNext
           Debug.Print strNext
         Next I
       Else
         Debug.Print Prn.DeviceName & " hat keine Feeds."
       End If
     Next Prn
    End Sub
    

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com



    Dienstag, 10. Januar 2012 11:09
    Moderator
  • Yep! :-) Die Nummern sind da und funktionieren.

    Wie kriege ich jetzt noch raus, welche ColorModes der Drucker hat? acPRCMonochrome ist nämlich = 1, und bei 1 druckt der Kerl bunt...!?

    P.S.: Hast Du diese Prozedur da oben jetzt extra geschrieben...?

    Auf jeden Fall schon 'mal vielen Dank...!

    Gruß Roland

    Dienstag, 10. Januar 2012 12:52
  • Es hat sich erledigt. Ich habe einfach die Standard-Einstellung auf "Graustufen" geändert und nun passts.

    Vielen Dank noch mal für die hilfreiche Prozedur...

    Gruß Roland

    Dienstag, 10. Januar 2012 16:00