Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0184: Vom Drucker unterstützte Papierfächer auslesen

 von 

Beschreibung 

Mit der 'DeviceCapabilities' API-Funktion kann man allerhand Informationen über den Drucker erfahren.
Denn was nutzen einem die ganzen schönen Konstanten in VB, wenn man nicht weiß, ob der angeschlossene Drucker die Option überhaupt unterstützt. In diesem Tipp wird gezeigt, wie die API verwendet werden muss, um Informationen über die Papierfächer des Druckers auslesen zu können.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

DeviceCapabilitiesA (DeviceCapabilities)

Download:

Download des Beispielprojektes [2,41 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Listen-Steuerelement "List2"
' Steuerelement: Kombinationsliste "Combo1"
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

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
        
Const DC_BINS = 6
Const DC_BINNAMES = 12

Private Sub Form_Load()
  Dim X%
    
    For X = 0 To Printers.Count - 1
      Combo1.AddItem Printers(X).DeviceName
    Next X
    Combo1.ListIndex = 0
End Sub

Private Sub combo1_Click()
  Dim Prn As Printer
    
    If Combo1.ListIndex > -1 Then
      For Each Prn In Printers
        If Prn.DeviceName = Combo1.List(Combo1.ListIndex) Then
          Call GetBins(Prn)
          Exit For
        End If
      Next
    End If
End Sub
     
Private Sub GetBins(Prn As Printer)
  Dim X%, p%, AA$, bb$, Bins%, BinList$
  Dim PSize$, dX&, dY&
  Dim BinNums%()
  
    Bins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                              DC_BINS, ByVal vbNullString, 0)
    If Bins Then
      ReDim BinNums(1 To Bins)
      Bins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                                DC_BINS, BinNums(1), 0)
      
      BinList = String$(24 * Bins, 0)
      Bins = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                                DC_BINNAMES, ByVal BinList, 0)
  
      List1.Clear
      List2.Clear
      For X = 1 To Bins
        AA = Mid(BinList, 24 * (X - 1) + 1, 24)
        p = InStr(AA, vbNullChar)
        If p Then AA = Left$(AA, p - 1)
        List1.AddItem AA
        List2.AddItem BinNums(X)
      Next X
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Rocco Smaldore am 09.08.2004 um 14:33

Soweit funktioniert der Tipp einwandfrei - lediglich in einem Fall werden nicht alle verfügbaren Schächte ausgegeben: wenn ein Drucker (bei mir HP 8550) unter der Option "NT Formulare" etwas eingetragen hat, erscheint nur "Forms select" als einziger Schacht.

Hat jemand eine Idee, wie ich die Schächte trotzdem auslesen kann?

Gruss aus der Schweiz
Rocco Smaldore

Kommentar von Andrea am 26.10.2001 um 14:15

Das Auslesen ist schon mal toll. Nur habe ich einen Drucker anzusteuern mit 4 festen Schächten und einem manuellen. Und schaffe es einfach nicht den 4. anzusprechen. Ich versuchs mit PAPERBIN. Von 1 bis 3 ist alles wunderbar, aber bei 4 spricht der manuelle Schacht an und bei 5 wieder der erste. Kann mir jemand helfen?

Kommentar von Andree Toussaint am 06.12.2000 um 11:28

Obiger Tip ist sehr wichtig für mich,
da ich über VB 5.0
gerne die Schächte
der Drucker einlesen
möchte. jedoch möchte ich auch den Schacht
bestimmen können, bevor ich unter VB 5.0
etwas drucke. Wie kann
ich also nicht nur den
Schacht einlesen, sondern auch verändern, ohne die
Drucksteuerung aktivieren zu müssen ?