VB 5/6-Tipp 0185: Vom Drucker unterstützte Papierformate auslesen
von ActiveVB
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: | Verwendete API-Aufrufe: | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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?