AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drucker mit langen Schachtnamen

Ein Thema von Eurowig · begonnen am 30. Jan 2009 · letzter Beitrag vom 24. Mär 2009
Antwort Antwort
Eurowig
(Gast)

n/a Beiträge
 
#1

Drucker mit langen Schachtnamen

  Alt 30. Jan 2009, 13:10
Hallo

bisher habe ich immer mit
DeviceCapabilities(PChar(PrinterName), PChar(PPort), DC_BINNAMES, POutput, nil); die Schächte eines Druckers ermittelt. Nur liefert DC_BINNAMES nur 24 Zeichen pro Schacht zurück. Bei einem HP Laserjet 1200 sieht die Liste dann so aus:

Automatisch auswählen
Automatische Druckeraus
Schacht 1
Manueller Einzug (Schac

Was mich stört sind die abgeschnittenen Einträge 2 und 4. Wenn ich hingegen mit einem x-beliebigen Windows Druckersetup Dialog (z.B. über MS Word) mir die Schächte ansehe, sind diese korrekt und in voller Länge zu sehen.

Hat jemand eine Idee wie ich auch mit D2007 an die vollständigen Schachtnamen komme?

Thx.

P.S: Da auch im Metaphors ReportBuilder 10.09 die Schächte abgeschnitten werden, glaube ich, dass das nicht so ganz einfach ist.
  Mit Zitat antworten Zitat
Eurowig
(Gast)

n/a Beiträge
 
#2

Re: Drucker mit langen Schachtnamen

  Alt 3. Feb 2009, 08:53
Habs mir fast schon gedacht, da man auch im Google zu nichts findet.

Werds mal in nem C++ Forum versuchen, da man da ja doch viel intensiver systemnah programmiert. Irgendwie muss es ja gehen.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#3

Re: Drucker mit langen Schachtnamen

  Alt 3. Feb 2009, 08:57
Vielleicht hilft dir dieser VB-Code ja weiter:
Code:
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
  Mit Zitat antworten Zitat
Eurowig
(Gast)

n/a Beiträge
 
#4

Re: Drucker mit langen Schachtnamen

  Alt 3. Feb 2009, 09:37
Nicht wirklich. Den die Zeile

AA = Mid(BinList, 24 * (X - 1) + 1, 24) ist genau das Problem. Und wenn man den Buffer von 24 Zeichen erhöht, kommt nix vernünftiges raus. Die API 'DeviceCapabilities' gibt da einfach nicht mehr her, zumindest stehts so in der MSDN.

Ich vermute ja, dass man direkt auf den Druckertreiber losgehen müsste.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

Re: Drucker mit langen Schachtnamen

  Alt 3. Feb 2009, 14:30
Hallo,

das mit den 24 Zeichen ist so, seit es Windows gibt - im Prinzip hat also der Programmierer des Treibers einen Fehler gemacht, wenn er längere Namen vergibt. Ich schätze, um die ganzen Namen auszulesen, muss man an die Struktur heran, in der sie gespeichert sind, und die könnte, im Gegensatz zum API-Aufruf, von Version zu Version anders sein. Aber jede Windows-Version kennt ja ihre eigene Treiberstruktur und kann die Namen daher in ganzer Länge darstellen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Drucker mit langen Schachtnamen

  Alt 3. Feb 2009, 14:55
Auch auf der MSDN-Seite steht nur etwas von 24 Zeichen
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
LikeMike

Registriert seit: 18. Jul 2005
21 Beiträge
 
#7

Re: Drucker mit langen Schachtnamen

  Alt 24. Mär 2009, 11:57
Hallo!
Ich patche in so einem Fall immer den Treiber. z.B. ist beim Epson LQ850 (EP24RES.DLL)der Name für die Schächte irgendwas mit "Erweiterungssonderschacht 1" und "Erweiterungssonderschacht 2". Durch die Begrenzung auf 24 Zeichen heissen die dann beide "Erweiterungssonderschacht", was so unbrauchbar ist.
Das Patchen ist mit einem Hex-Editor leicht gemacht!

VG
Mike
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz