Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0185: Vom Drucker unterstützte Papierformate 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 die vom Drucker unterstüzten Papierformate auslesen zu können.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

DeviceCapabilitiesA (DeviceCapabilities)

Download:

Download des Beispielprojektes [2,52 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_PAPERS As Long = 2&
Const DC_PAPERNAMES As Long = 16&

Private Sub Form_Load()
    Dim X As Integer
    
    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 GetPapers(Prn)
                Exit For
            End If
        Next
    End If
End Sub
     
Private Sub GetPapers(Prn As Printer)
    Dim X As Integer, p As Integer, Papers As Integer
    Dim AA As String, bb As String, PaperList As String
    Dim PSize As String
    Dim dX As Long, dY As Long
    Dim PaperNums() As Integer
    
    Papers = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
             DC_PAPERS, ByVal vbNullString, 0)
    
    If Papers > 0 Then
        ReDim PaperNums(1 To Papers)
        Papers = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                 DC_PAPERS, PaperNums(1), 0)
        
        PaperList = String$(64 * Papers, 0)
        Papers = DeviceCapabilities(Prn.DeviceName, Prn.Port, _
                 DC_PAPERNAMES, ByVal PaperList, 0)
        
        List1.Clear
        List2.Clear
        For X = 1 To Papers
            AA = Mid(PaperList, 64 * (X - 1) + 1, 64)
            p = InStr(AA, vbNullChar)
            
            If p Then AA = Left$(AA, p - 1)
            List1.AddItem AA
            List2.AddItem PaperNums(X)
        Next X
    Else
        Call MsgBox("Fehler! Vermutlich unterstüzt der Druckertreiber diese Funktion nicht!")
    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 7 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 Ammann Urs am 16.09.2004 um 08:04

Guten Tag Zusammen
funktioniert sehr gut. Wie kann ich die Werte für
- Hochformat
- Querformat
- Querformat_gedreht abfragen
Gibt es dazu auch eine Möclichkeit?
Habe einen Xerox 510dp Plotter mit Falter und muss die A1/A0 um 180 drehen. (Querformat gedreht)
Habt Ihr einen Tipp?
Besten Dank im voraus.
Mit freundlichen Grüssen Ammann Urs

Kommentar von Florian Rittmeier am 07.01.2004 um 18:36

Dann unterstützt der Druckertreiber es nicht.

Gruß Florian

Kommentar von Robert Mages am 07.01.2004 um 17:17

Die Funktion DeviceCapabilities liefert das Ergebnis -1. Das kannst du ausprobieren mit dem z.B. Drucker HP DesignJet 120nr, HP DesignJet 450C und weitere. Einfach mal vom Netz downloaden, installieren und ausprobieren. Funktioniert garantiert nicht. Hat auch nichts mit dem Betriebssystem zu tun.

Kommentar von Florian Rittmeier am 07.01.2004 um 17:01

Hallo Robert,

das hat eigentlich auch mit HP DesignJet-Druckern zu gehen, es sei den die sind noch sehr sehr neu und die Treiber haben die Infos nicht bzw. der Hersteller, was ich mir bei HP nicht vorstellen kann, hat bei den Treibern gesparrt.

Wie zeigt es sich denn, dass es nicht geht?

Gruß Florian

Kommentar von Robert Mages am 07.01.2004 um 15:16

Funktioniert nicht mit HP-Designjet Druckern.
Kann mir einer sagen warum???

Kommentar von Florian Rittmeier am 24.06.2003 um 15:52

Die Maße zu den jeweiligen Papiergrößen sind standardisiert und mit jeder besseren Suchmaschine zu ermitteln.

Eine Seite mit umfangreichen Informationen zum Thema ist http://www.uni-kiel.de/rz/ausgabe/paperformats/paperformats.html

Gruß Florian

Kommentar von Thomas Bock am 08.03.2001 um 02:48

Guter Tip!
Frage: Wie kann ich die Maße für die jeweiligen Papiergrößen ermitteln?