VB 5/6-Tipp 0184: Vom Drucker unterstützte Papierfächer 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 Informationen über die Papierfächer des Druckers 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_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-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 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 ?