Papiergrösse in Druckschacht abfragen
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Papiergrösse in Druckschacht abfragen
Hallo zusammen
die Ansteuerung und Abfrage der verfügbaren Druckschächten funktionert sehr gut. Auch die auf dem Drucker verfügbaren Formate können mit :forms abgefragt werden.
Bis anhin haben wir die Druckschachtansteuerung manuell gepflegt und in einer Datenbank angelegt.
Nun soll das Programm die in den Druckschächten verfügbare Papiergrösse abfragen und den passenden Druckschacht (paperbin) feststellen und verwenden. (Die Automatische Auswahl nach Papiergrösse ist nicht möglich. Es muss der Druckschacht angesteuert werden)
Hier ist das Problem: Wie lässt sich aus xbase die in einem Druckschacht vorhandene bezw. vorgegebene Papiergrösse eines Druckers abfragen?
die Ansteuerung und Abfrage der verfügbaren Druckschächten funktionert sehr gut. Auch die auf dem Drucker verfügbaren Formate können mit :forms abgefragt werden.
Bis anhin haben wir die Druckschachtansteuerung manuell gepflegt und in einer Datenbank angelegt.
Nun soll das Programm die in den Druckschächten verfügbare Papiergrösse abfragen und den passenden Druckschacht (paperbin) feststellen und verwenden. (Die Automatische Auswahl nach Papiergrösse ist nicht möglich. Es muss der Druckschacht angesteuert werden)
Hier ist das Problem: Wie lässt sich aus xbase die in einem Druckschacht vorhandene bezw. vorgegebene Papiergrösse eines Druckers abfragen?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Die berühmten ESC-Sequenzen, da sind aber bessere Experten als ich hier im Forum --> Hubert?
Oder schau mal, ob über die Powershell mit dem Befehl Get-Printer oder Get-PrinterConfiguration etwas zurück bekommst.
Mühsam wirds allemal.
Oder schau mal, ob über die Powershell mit dem Befehl Get-Printer oder Get-PrinterConfiguration etwas zurück bekommst.
Mühsam wirds allemal.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo Hubert
Da hast du recht. Mühsam ist es.
Die berühmten ESC-Sequenzen lassen sich unter einem Windows-Druckertreiber nicht mehr benutzen. Die sind schon lange ausgestorben. (Leider)
Da hast du recht. Mühsam ist es.
Die berühmten ESC-Sequenzen lassen sich unter einem Windows-Druckertreiber nicht mehr benutzen. Die sind schon lange ausgestorben. (Leider)
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Das ist HERBERT
Ich bin Hubert ... soweit ich das weiß, sind die HBPrinter() Sachen alle generisch (macht ja auch keinen Sinn seine Anwendung auf genau einen Drucker zu schreiben).
Aber es muss in der API des Druckertreibers schon die Info geben, wird ja auch angezeigt.
Method XbpPrinter():forms() - könnte eventuell solche Infos abfragen.
Method XbpPrinter():paperBins() - manchmal kann man am Schacht erkennen, was drin sein kann, aber meist ist wohl immer A4 als Rückgabewert.
Method XbpPrinter():paperSize() - man könnte eventuell die Schächte zuweisen und die Größe abfragen.
Method XbpPrinter():setupDialog() - hiermit kann man den Anwender den Schacht bestimmen lassen.
Wir haben es auch schon gemacht, mehrere Windows Druckerelemente (XYZ mit Farbe, XYZ mit Graustufen, XYZ Mehrseitendruck, XYZ Einseitendruck) für einen Drucker zu erstellen und jeweils die gewünschten Einstellungen vorzugeben.
Was immer geht, wenn man das richtige PaperBIN einmal manuell abfragen und speichern kann (die ID), dann kann man dieses auch immer wieder ansteuern.
Ist aber alles lange her
Ich bin Hubert ... soweit ich das weiß, sind die HBPrinter() Sachen alle generisch (macht ja auch keinen Sinn seine Anwendung auf genau einen Drucker zu schreiben).
Aber es muss in der API des Druckertreibers schon die Info geben, wird ja auch angezeigt.
Method XbpPrinter():forms() - könnte eventuell solche Infos abfragen.
Method XbpPrinter():paperBins() - manchmal kann man am Schacht erkennen, was drin sein kann, aber meist ist wohl immer A4 als Rückgabewert.
Method XbpPrinter():paperSize() - man könnte eventuell die Schächte zuweisen und die Größe abfragen.
Method XbpPrinter():setupDialog() - hiermit kann man den Anwender den Schacht bestimmen lassen.
Wir haben es auch schon gemacht, mehrere Windows Druckerelemente (XYZ mit Farbe, XYZ mit Graustufen, XYZ Mehrseitendruck, XYZ Einseitendruck) für einen Drucker zu erstellen und jeweils die gewünschten Einstellungen vorzugeben.
Was immer geht, wenn man das richtige PaperBIN einmal manuell abfragen und speichern kann (die ID), dann kann man dieses auch immer wieder ansteuern.
Ist aber alles lange her
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hubert, Entschuldige die Namensverwechslung.....
Es gibt in der API des Druckertreibers schon einige Angaben. Etwa die welche xbase mit den von die erwähnten Angaben auch anzeigen kann.
Leider ist die Papiergrösse immer A4 egal was du machst.
Wr möchten jetzt die Schächte des Druckers Abfragen und je nach den vorhandenen Papiergrössen z.B. A3, A4, A4, A5 auch den Ausdruck steuern.
z.B. wenn ein Drucker nur 1 A4 Fach hat muss Logo gedruckt werden, sind 2 Fächer vorhanden ist das erste mit Logo das zweite ohne Logo usw. usw.
Die Logik der Bestückung wäre bei gleichen Papiergrössen immer die selbe.
Bei allen HP Drucker gibt es mit dem Universal-Druckertreiber einen Registry Eintrag der die gewünschten Angaben enthält:
Es wird auch schon überlegt alle anderen Drucker zu ersetzten ....
Es gibt in der API des Druckertreibers schon einige Angaben. Etwa die welche xbase mit den von die erwähnten Angaben auch anzeigen kann.
Leider ist die Papiergrösse immer A4 egal was du machst.
Das funktionert seit einiger Zeit nicht mehr. Das hatten wir früher auch mal. Wenn du jetzt hintereinander OHNE Pause zwischen den Druckjobs, Jobs auf solche Elemente absetzt die über den selben Treiber laufen greift Windows ein optimiert und gibt alle Jobs mit den zuerst benutzten Einstellungen aus.Wir haben es auch schon gemacht, mehrere Windows Druckerelemente (XYZ mit Farbe, XYZ mit Graustufen, XYZ Mehrseitendruck, XYZ Einseitendruck) für einen Drucker zu erstellen und jeweils die gewünschten Einstellungen vorzugeben.
Das Problem ist dass sich diese ID öfters ändern, etwa wenn ein anderer Drucker mit altem Namen installiert wird oder auch schon bei Treiberupdates oder wenn noch nichts erfasst wurde dann kommt es Regelmässig zum Chaos.Was immer geht, wenn man das richtige PaperBIN einmal manuell abfragen und speichern kann (die ID), dann kann man dieses auch immer wieder ansteuern.
Wr möchten jetzt die Schächte des Druckers Abfragen und je nach den vorhandenen Papiergrössen z.B. A3, A4, A4, A5 auch den Ausdruck steuern.
z.B. wenn ein Drucker nur 1 A4 Fach hat muss Logo gedruckt werden, sind 2 Fächer vorhanden ist das erste mit Logo das zweite ohne Logo usw. usw.
Die Logik der Bestückung wäre bei gleichen Papiergrössen immer die selbe.
Bei allen HP Drucker gibt es mit dem Universal-Druckertreiber einen Registry Eintrag der die gewünschten Angaben enthält:
Code: Alles auswählen
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\HPLaserMFP-M725\TrayFormTable
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Papiergrösse in Druckschacht abfragen
hi,
"was" in einem "Paperbin" liegt kann man IHMO nicht bestimmen ... das kommt darauf an "was" der User in den "Schacht" legt.
man kann zwar bestimmen für welches Format der Drucker "default" konfiguriert wurde aber nicht ob das Papier dem Format entspricht
bei den HP-Drucker war das "Problem" das man die "Nummer" der Schächte finden musste denn die stimmen nicht mit den "default" Werten
hierzu war es notwendig die "Original HP" Treiber zu installieren die dann die Werte lieferte
---
Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet
üblicherweise kommt man nur bis zum Druck-Spooler und der ist immer "online"
"was" in einem "Paperbin" liegt kann man IHMO nicht bestimmen ... das kommt darauf an "was" der User in den "Schacht" legt.
man kann zwar bestimmen für welches Format der Drucker "default" konfiguriert wurde aber nicht ob das Papier dem Format entspricht
bei den HP-Drucker war das "Problem" das man die "Nummer" der Schächte finden musste denn die stimmen nicht mit den "default" Werten
hierzu war es notwendig die "Original HP" Treiber zu installieren die dann die Werte lieferte
---
Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet
üblicherweise kommt man nur bis zum Druck-Spooler und der ist immer "online"
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo Jimmy
es geht darum dass der Drucker nur an einem Ort konfiguriert werden muss. Also unter Windows. Ohne dies lassen sich die Druckschächte auch nicht verwenden. Es soll die Anordnung und die Vorhandenen (eingestellten) Formate vom Treiber übernommen werden.
Das richtige Format in die Passende Schublade zu legen ist Sache des Nutzers, es geht nicht darum zu kontrollieren ob er das richtige Papier eingelegt hat sondern was vorhanden sein soll.
es geht darum dass der Drucker nur an einem Ort konfiguriert werden muss. Also unter Windows. Ohne dies lassen sich die Druckschächte auch nicht verwenden. Es soll die Anordnung und die Vorhandenen (eingestellten) Formate vom Treiber übernommen werden.
Das richtige Format in die Passende Schublade zu legen ist Sache des Nutzers, es geht nicht darum zu kontrollieren ob er das richtige Papier eingelegt hat sondern was vorhanden sein soll.
Gar nicht. Wenn es fehlt zeigt der Drucker "Fehler" im Display und bleibt stehen.Frage : wie fragst du ab "ob" sich überhaupt Papier im Schacht befindet
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Papiergrösse in Druckschacht abfragen
rennst du dann zum Drucker um nachzusehen
... es ist ja nicht so das es gar nicht geht ... man muss nur wissen "wie"
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Das ist in der Tat nicht so ohne weiteres oder einfach möglich. Jedenfalls habe ich noch keine einfache Variante gefunden.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Carlo,
Jimmy weiß sowas immer. Aber er erhöht auch gerne mal die Spannung, macht erstmal nur unklare Andeutungen, um dann später mit der Lösung raus zu rücken.
Jan
Jimmy weiß sowas immer. Aber er erhöht auch gerne mal die Spannung, macht erstmal nur unklare Andeutungen, um dann später mit der Lösung raus zu rücken.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo Jan
das hat schon was. Es ist genau so wie du schreibst.
In diesem Fall gibt es jedoch gar keine praktikable Lösung. Ich habe schon einiges versucht aber alles führte immer nur zur Verwirrungen des Personals. Füllt z.B. ein User Papier nach wärend ein anderer gleichzeitig Drucken will bekommt dieser eine Fehlermeldung, wenn er dann nachschaut ist das Papier vorhanden. Chaos um nichts.
Hat der Drucker selbst noch einen Spooler der aktiviert ist gibt es, solange der Drucker eingeschaltet ist, überhaupt keine Fehlermeldungen die abgefragt werden können. Da hilft dann nur der Blick auf das Display oder die Web-Oberfläche des Druckers.
das hat schon was. Es ist genau so wie du schreibst.
In diesem Fall gibt es jedoch gar keine praktikable Lösung. Ich habe schon einiges versucht aber alles führte immer nur zur Verwirrungen des Personals. Füllt z.B. ein User Papier nach wärend ein anderer gleichzeitig Drucken will bekommt dieser eine Fehlermeldung, wenn er dann nachschaut ist das Papier vorhanden. Chaos um nichts.
Hat der Drucker selbst noch einen Spooler der aktiviert ist gibt es, solange der Drucker eingeschaltet ist, überhaupt keine Fehlermeldungen die abgefragt werden können. Da hilft dann nur der Blick auf das Display oder die Web-Oberfläche des Druckers.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Carlo,
es gibt einen Weg wie man Drucker-Zustände auslesen kann, u. a. per SNMP (den anderen hab ich gerade nicht greifbar). Ich hatte das mal ausprobiert (zugegebener Maßen aber nicht sehr intensiv), hatte das aber nicht hinbekommen. Vielleicht weiß Jimmy da ja mehr.
Jan
es gibt einen Weg wie man Drucker-Zustände auslesen kann, u. a. per SNMP (den anderen hab ich gerade nicht greifbar). Ich hatte das mal ausprobiert (zugegebener Maßen aber nicht sehr intensiv), hatte das aber nicht hinbekommen. Vielleicht weiß Jimmy da ja mehr.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo Jan
Danke. Die Idee ist nicht schlecht. Das würde anzeigen was und wieviel im Drucker ist resp. wie das Fach eingestellt ist.
Muss mal nachdenken und nachschauen ob dies die Lösung ist, es zeigt dann noch nicht was auf dem Server konfiguriert ist.
Mit snmp habe ich (nicht mit Druckern) schon einiges gemacht. Das nervige dabei ist die Infos zu den Schlüsseln zu bekommen damit sich die Werte auch nutzen lassen. Abfragen der Daten geht mit snmpwalk und einem Shell Aufruf sehr einfach. Benötigst du Infos dazu?
Danke. Die Idee ist nicht schlecht. Das würde anzeigen was und wieviel im Drucker ist resp. wie das Fach eingestellt ist.
Muss mal nachdenken und nachschauen ob dies die Lösung ist, es zeigt dann noch nicht was auf dem Server konfiguriert ist.
Mit snmp habe ich (nicht mit Druckern) schon einiges gemacht. Das nervige dabei ist die Infos zu den Schlüsseln zu bekommen damit sich die Werte auch nutzen lassen. Abfragen der Daten geht mit snmpwalk und einem Shell Aufruf sehr einfach. Benötigst du Infos dazu?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Papiergrösse in Druckschacht abfragen
hi
@Jan :
wenn man meine Threads nicht liesst weiss man nicht die Lösung
@Ramses
Paperbin / configure() ...
12. Juni 2002
das Thema hatte ich vor fast 20 Jahren angesprochen ... aber da warst du noch nicht "dabei"
is :paperbin online ?
23. Mai 2005
da kam ich zur Lösung das es am "DC" liegt
man kann es "direct" mit Xbase++ machen und braucht dazu keine "Tricks"
man muss nur "verstehen" das ein "Presspace" eben kein "DC" ( Device Context ) ist und man das Drucker Object mit dem "DC" verknüpfen muss.
@Jan :
wenn man meine Threads nicht liesst weiss man nicht die Lösung
@Ramses
Paperbin / configure() ...
12. Juni 2002
das Thema hatte ich vor fast 20 Jahren angesprochen ... aber da warst du noch nicht "dabei"
is :paperbin online ?
23. Mai 2005
da kam ich zur Lösung das es am "DC" liegt
man kann es "direct" mit Xbase++ machen und braucht dazu keine "Tricks"
man muss nur "verstehen" das ein "Presspace" eben kein "DC" ( Device Context ) ist und man das Drucker Object mit dem "DC" verknüpfen muss.
gruss by OHR
Jimmy
Jimmy
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo JimmyAUGE_OHR hat geschrieben: ↑Mi, 25. Aug 2021 18:37 da kam ich zur Lösung das es am "DC" liegt
man kann es "direct" mit Xbase++ machen und braucht dazu keine "Tricks"
man muss nur "verstehen" das ein "Presspace" eben kein "DC" ( Device Context ) ist und man das Drucker Object mit dem "DC" verknüpfen muss.
das ist so nicht ganz richtig. Man muss nur "verstehen" wie Windows mit dem Drucker umgeht.
Es gibt eine grundlegende Voraussetzung, die erfüllt sein muss, um den Zustand eines physischen Druckers zu bestimmen: Der Spooler muss versuchen, einen Druckauftrag an den physischen Drucker zu senden. Dies ist das einzige Mal, bei welchem der Zustand des Druckers vom Portmonitor gemeldet wird.
Wenn die Druckerwarteschlange leer ist wird angenommen, dass der Drucker bereit für die Annahme von Druckaufträgen ist. Dies ist eine gültige Annahme, auch wenn sich der physische Drucker in einem Fehlerzustand befindet, z. B. offline. Das Betriebssystem betrachtet den Drucker als bereit, Druckaufträge zu akzeptieren, auch wenn die Zustellung an den physischen Drucker aus irgendeinem Grund nicht abgeschlossen werden kann. Ein solcher Fall wird als Fehlerstatus im Betriebssystem betrachtet, der vom Benutzer behoben werden muss. Es wird nicht als Fehler betrachtet, der für die Anwendung gemeldet werden kann, die die Warteschlange des Druckauftrags erfolgreich abschließen kann.
Quelle: Microsoft DOCS
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Guten Mrogen
eine erste Funktionierende Lösung zur Abfrage von vorhandenem Schacht mit Papierformat habe ich inzwischen erarbeitet. Die ersten Tests mit einigen Druckern waren erfolgreich.
Wenn es jemand brauchen kann, hier meine aktuelle Lösung:
Weitere Tests mit unterschiedlichen Druckertypen stehen heute noch an.
eine erste Funktionierende Lösung zur Abfrage von vorhandenem Schacht mit Papierformat habe ich inzwischen erarbeitet. Die ersten Tests mit einigen Druckern waren erfolgreich.
Wenn es jemand brauchen kann, hier meine aktuelle Lösung:
Code: Alles auswählen
oDrucker := XbpPrinter():New()
oDrucker:create()
cStandardDrucker := oDrucker:devName // standarddrucker
aBins := oDrucker:paperbins()
getRealTrayArray( cStandardDrucker, aBins, "A5", "test.txt" )
oDrucker:destroy()
function getRealTrayArray( cDruckerName, aBins, cForm, cLogFilename )
local oReg, cBuffer, n, c
local ret_val := {}, arr := {}, arrTray := {}
local t := ""
default cForm to "A4", cLogFilename to ""
if !empty( cLogFileName )
t += chr(13) + chr(10)
t += "**** getRealTrayArray() * " + dtoc(date()) + " - " + time() + chr(13) + chr(10)
t += "Druckername: " + cDruckerName + chr(13) + chr(10)
t += "PaperBins : " + var2char( aBins ) + chr(13) + chr(10)
t += "G. Format : " + iif(empty(cForm), "ALLE", cForm ) + chr(13) + chr(10)
endif
oReg := XbpReg():NEW( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\" + cDruckerName +"\PrinterDriverData" )
if oReg:Status()
oReg:ReadBinType( "C" ) // Rckgabe als Char // XbpReg Klasse mit Erg„nzung fr Datatyp REG_MULTI_SZ erforderlich
cBuffer := oReg:GetValue( "TrayFormTable")
if cBuffer != nil .and. valtype(cBuffer) = "C"
n := c := 1
arr := {}
do while n < len(cBuffer) .and. c > 0
c := at(chr(0),cBuffer, n )
aadd(arr, substr( cBuffer, n, c-n ) )
n := c+1
if len(arr) = 3
aadd( arrTray, arr )
arr := {}
endif
enddo
endif
if len(arrTray) < 1
t += "**FEHLER: Key TrayFormTable in PrinterDriverData ist leer oder konnte nicht gelesen werden" + chr(13) + chr(10)
endif
for i = len(arrTray) to 1 step -1
n := ascan( aBins, {|x|alltrim(x[2]) == arrTray[i,1] .and. arrTray[i,2] != "0" .and. ( empty(cForm) .or. arrTray[i,2] == cForm ) })
if n != 0
aadd( ret_val, { aBins[n,1], aBins[n,2], arrTray[i,2] } )
endif
next
else
t += "**FEHLER: PrinterDriverData kann nicht gelesen werden" + chr(13) + chr(10)
endif
if !empty( cLogFileName )
t += "Ret_Val : " + var2char( ret_val ) + chr(13)+chr(10)
strfile( t, cLogFilename, .t. )
endif
return(ret_val)
Code: Alles auswählen
**** getRealTrayArray() * 26.08.2021 - 07:53:02
Druckername: Einkauf HP-MFP6
PaperBins : {{15, " Automatisch ausw„hlen"}, {257, " Drucker autom. Auswahl"}, {258, " Manuelle Zufuhr"}, {259, " Fach 1"}, {260, " Fach 2"}, {261, " Fach 3"}, {262, " Fach 4"}, {263, " Fach 5"}, {1285, "Nicht bestimmt"}, {1284, "Normal"}, {1513, "HP LaserJet 90 g"}, {1276, "Leicht 60-74g"}, {1514, "Mittelschwer 85-95 g"}, {1279, "Briefpapier"}, {1278, "Recyclingpapier"}, {1515, "HP Color Laser 105 g, m"}, {1516, "HP Premium Choice 120 g"}, {1518, "HP Pr„sentationspapier "}, {1519, "HP Professional 120g, s"}, {1520, "HP Premium Pr„sentation"}, {1257, "Mittleres Gewicht 96-11"}, {1275, "Schwer 111-130g"}, {1271, "Mittleres Gewicht 96-11"}, {1270, "Hochgl„nzend, schwer 11"}, {1523, "HP Broschrenpapier, ma"}, {1525, "HP Broschrenpapier, ho"}, {1274, "Sehr schwer 131-175g"}, {1269, "Hochgl„nzend, sehr schw"}, {1530, "HP Deckblattpapier 200 "}, {1531, "HP Fotopapier, matt 200"}, {1533, "HP Broschrenpapier, ho"}, {1273, "Karton 176-220 g"}, {1272, "Karte 176-220 g, hochgl"}, {1537, "Color Laser-Transparent"}, {1280, "Etiketten"}, {1282, "Briefkopf"}, {1267, "Briefumschlag"}, {1283, "Vorgedruckt"}, {1281, "Vorgelocht"}, {1277, "Farbig"}, {1540, "Rau"}, {1542, "Folie, opak"}}
G. Format : A5
Ret_Val : {{263, " Fach 5", "A5"}}
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15706
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Bei all den Überlegungen ist es natürlich schon wichtig, dass auch die Anwender sich an die Regeln halten, bei uns galt:
Fach 1 = A4 blanko
Fach 2 = A4 Logo (falls überhaupt ein 2. da war)
Fach 3 = A3 Papier (nur wenige haben den)
Universaleinzug ... Hier kann man Etiketten etc. für manuelles Drucken einlegen
klar dass man nicht einfach mal so ein anderes Papier in A4 einlegen darf nur weil man was anderes Drucken will, dafür haben wenige lokale Drucker.
Fach 1 = A4 blanko
Fach 2 = A4 Logo (falls überhaupt ein 2. da war)
Fach 3 = A3 Papier (nur wenige haben den)
Universaleinzug ... Hier kann man Etiketten etc. für manuelles Drucken einlegen
klar dass man nicht einfach mal so ein anderes Papier in A4 einlegen darf nur weil man was anderes Drucken will, dafür haben wenige lokale Drucker.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Hubert,
was Du da mit mit Fach 1und 2 beschreibst läßt sich natürlich nie auslesen. Dazu müssten die Fächer ja jeweils einen eingebauten Scanner haben. Ähnlich wäre das ob da das 80- oder das 120-gr-Papier drin liegt, da würde nur eine Dickenmessung helfen. Aber ob da DIN A 4quer oder hoch drin ist, oder DIN A 3, das müsste man auslesen können. Wobei mir das auch egal ist. Schicke ich was mit A4, dann schiebt der Drucker das von ganz alleine auf den Schacht, wo das passende Papier drin liegt, da muß ich mich selber heutzutage um gar nichts mehr kümmern.
Jan
was Du da mit mit Fach 1und 2 beschreibst läßt sich natürlich nie auslesen. Dazu müssten die Fächer ja jeweils einen eingebauten Scanner haben. Ähnlich wäre das ob da das 80- oder das 120-gr-Papier drin liegt, da würde nur eine Dickenmessung helfen. Aber ob da DIN A 4quer oder hoch drin ist, oder DIN A 3, das müsste man auslesen können. Wobei mir das auch egal ist. Schicke ich was mit A4, dann schiebt der Drucker das von ganz alleine auf den Schacht, wo das passende Papier drin liegt, da muß ich mich selber heutzutage um gar nichts mehr kümmern.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Das geht doch aber nur wenn du nur 1 Schacht mit A4 bestückt hast. Oder sehe ich was nicht?
z.B.
Fach 1 A4 Varia (Etti usw.)
Fach 2 A4 gelb
Fach 3 A4 weiss
Fach 4 A4 mit Logo
Fach 5 A5 weiss
Wie machst du dass das gewünschte Papier verwendet wird?
(einige Seiten Fach 2, einige Seiten Fach 3, einige Seiten Fach 4)
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Carlo,
genau das hatte ich doch geschrieben. Papierformat kann man auslesen, Papiergewicht, mit oder ohne Logo, oder Farbe nicht.
Und um das Papierformat kümmert der Drucker sich alleine, weil der ja weiß welche Größe in welchem Fach liegt. Da muß ich selber gar nichts machen in der Programmierung. Farbe etc. kann man höchstens durch Bennung der Fächer regeln, aber Fachnamen kann man auch per XbpPrinter auslesen, und dann den Druckjob passend schicken.
Jan
genau das hatte ich doch geschrieben. Papierformat kann man auslesen, Papiergewicht, mit oder ohne Logo, oder Farbe nicht.
Und um das Papierformat kümmert der Drucker sich alleine, weil der ja weiß welche Größe in welchem Fach liegt. Da muß ich selber gar nichts machen in der Programmierung. Farbe etc. kann man höchstens durch Bennung der Fächer regeln, aber Fachnamen kann man auch per XbpPrinter auslesen, und dann den Druckjob passend schicken.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Hallo Jan
jetzt habe ich einen hänger.
Wie gar nichts machen? Wenn ich je nach Drucker z.B. 2, 3, 4 Fächer die auf A4 gestellt sind habe.
Wie machst du denn das dass der Drucker bei 4 vorhandenen Fächer das gewünschte Papier z.B. Fach 4 mit Logo nimmt ohne die Fachauswahl per Programm?
( Die Reihenfolge der Papiersorten ist bei gleicher Anzahl A4 Fächer immer gleich.)
Valar Morghulis
Gruss Carlo
Gruss Carlo
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Papiergrösse in Druckschacht abfragen
hi,
um es kurz zu machen : mit dem Trick funktioniert es wie auch AGP eingestehen musste ...
die Xbase++ Konstante muss man mit den Herstellerwerten abgleichen
bei mir standen die nach Installation des Hersteller-Treiber UND des Zusatz-Schacht zur verfügung
IHMO nicht möglich während "eines" Druck-Job den Drucker-Schacht zu wechseln.
ich schicke einzelne Druck-JOB auf jeden Schacht die verschiedene Formate haben können und prüfe "ob Papier" vorhanden ist
was M$ "sagt" ist eine Sache ... wie es bei Xbase++ umgesetzt wurde eine andere.
um es kurz zu machen : mit dem Trick funktioniert es wie auch AGP eingestehen musste ...
29. Januar 2008
public.xbase++.generic
xbpprinter printerstatus
Code: Alles auswählen
IF oDC:Create( cPrinter ) == oDC // = self
Code: Alles auswählen
DO CASE
CASE nPaperBin = 1
oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_CASETTE ) // normal weiss
CASE nPaperBin = 2
oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_MIDDLE ) // untere "gelb"
OTHERWISE
oPrinter := PrinterPS( NIL, nCopies, XBPPRN_PAPERBIN_AUTO )
ENDCASE
bei mir standen die nach Installation des Hersteller-Treiber UND des Zusatz-Schacht zur verfügung
IHMO nicht möglich während "eines" Druck-Job den Drucker-Schacht zu wechseln.
ich schicke einzelne Druck-JOB auf jeden Schacht die verschiedene Formate haben können und prüfe "ob Papier" vorhanden ist
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Carlo,
ich hatte doch jetzt mehrfach den Gedanken von Hubert aufgegriffen, das der Drucker das Papierformat hergeben kann. Aber nicht die Farbe des Papiers, das Gewicht, oder ob mit oder ohne Logo.
Wenn Du aber weißt in welchem Fach sich welches Papier befindet, kannst Du das beim Ausdruck ja per :setPaperBin() festlegen. Ich habe das noch nie gemacht weil weder meine Kunden noch ich unterschiedliche Papiere in gleichen Seitenformaten nutzen (Logo etc. werden vom Ausdruck mitgeliefert, es gibt keine vorgedruckten Papiere mehr). Aber lt. Doku sollte das gehen.
Jan
ich hatte doch jetzt mehrfach den Gedanken von Hubert aufgegriffen, das der Drucker das Papierformat hergeben kann. Aber nicht die Farbe des Papiers, das Gewicht, oder ob mit oder ohne Logo.
Wenn Du aber weißt in welchem Fach sich welches Papier befindet, kannst Du das beim Ausdruck ja per :setPaperBin() festlegen. Ich habe das noch nie gemacht weil weder meine Kunden noch ich unterschiedliche Papiere in gleichen Seitenformaten nutzen (Logo etc. werden vom Ausdruck mitgeliefert, es gibt keine vorgedruckten Papiere mehr). Aber lt. Doku sollte das gehen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Papiergrösse in Druckschacht abfragen
Guten Morgen
Danke für die Antworten.
@Jimmy
mit
habe ich jetzt noch getestet. Es gibt immer .t. egal welcher Zustand der Drucker tatsächlich hat.
Erst nach dem Absetzen eines Druckjobs auf der gleichen WS ergibt :PrinterStatus() z.B. den Wert -3 (Kein Papier)
Die Druckjobs werden jedoch weiterhin problemlos angenommen und und in den Spooler gestellt und nach auffüllen von Papier auch problemlos gedruckt. Es funktioniert genau so wie MS dokumentiert.
Auch die Schachtauswahl funktioniert nicht so wie du vorschlägst. Schau mal was :PaperBin() meldet:
PaperBins : {{15, " Automatisch ausw„hlen"}, {257, " Drucker autom. Auswahl"}, {258, " Manuelle Zufuhr"}, {259, " Fach 1"}, {260, " Fach 2"}, {261, " Fach 3"}, {262, " Fach 4"}, {263, " Fach 5"}, {1285, "Nicht bestimmt"}, {1284, "Normal"}, {1513, "HP LaserJet 90 g"}, {1276, "Leicht 60-74g"}, {1514, "Mittelschwer 85-95 g"}, {1279, "Briefpapier"}, {1278, "Recyclingpapier"}, {1515, "HP Color Laser 105 g, m"}, {1516, "HP Premium Choice 120 g"}, {1518, "HP Pr„sentationspapier "}, {1519, "HP Professional 120g, s"}, {1520, "HP Premium Pr„sentation"}, {1257, "Mittleres Gewicht 96-11"}, {1275, "Schwer 111-130g"}, {1271, "Mittleres Gewicht 96-11"}, {1270, "Hochgl„nzend, schwer 11"}, {1523, "HP Broschrenpapier, ma"}, {1525, "HP Broschrenpapier, ho"}, {1274, "Sehr schwer 131-175g"}, {1269, "Hochgl„nzend, sehr schw"}, {1530, "HP Deckblattpapier 200 "}, {1531, "HP Fotopapier, matt 200"}, {1533, "HP Broschrenpapier, ho"}, {1273, "Karton 176-220 g"}, {1272, "Karte 176-220 g, hochgl"}, {1537, "Color Laser-Transparent"}, {1280, "Etiketten"}, {1282, "Briefkopf"}, {1267, "Briefumschlag"}, {1283, "Vorgedruckt"}, {1281, "Vorgelocht"}, {1277, "Farbig"}, {1540, "Rau"}, {1542, "Folie, opak"}}
@Jan
Jetzt verstehe ich.
Ja der Drucker gibt alle Formate her die zum Drucken unterstützt würden jedoch nicht welche aktuell vorhanden sind und benutzt werden können. Weil ich mehrere gleiche A4 Fächer habe muss ich vor der Druckausgabe wissen wieviele dann weiss ich was ich ausgeben muss. Ist z.b. nur 1 A4 Fach vorhanden muss auch das Logo gedruckt werden oder ist kein A5 vorhanden muss für einen bestimmten Druck eine andere Darstellung und A4 genutzt werden. Das kann nicht einfach dem Drucker gesendet werden ohne zu wissen: Hat er das bestimmte Papier tatsächlich.. Die letzten Jahre haben wir im Programm für jeden Drucker festgelegt was vorhanden ist und aus welchen Fach was gedruckt wird. Das hat auch funktoniert. Nun soll dieser Schritt entfernt und die Config des Druckers unter Windows abgefragt und genutzt werden.
Danke für die Antworten.
@Jimmy
mit
Code: Alles auswählen
IF oDC:Create( cPrinter ) == oDC // = self
Erst nach dem Absetzen eines Druckjobs auf der gleichen WS ergibt :PrinterStatus() z.B. den Wert -3 (Kein Papier)
Die Druckjobs werden jedoch weiterhin problemlos angenommen und und in den Spooler gestellt und nach auffüllen von Papier auch problemlos gedruckt. Es funktioniert genau so wie MS dokumentiert.
Auch die Schachtauswahl funktioniert nicht so wie du vorschlägst. Schau mal was :PaperBin() meldet:
PaperBins : {{15, " Automatisch ausw„hlen"}, {257, " Drucker autom. Auswahl"}, {258, " Manuelle Zufuhr"}, {259, " Fach 1"}, {260, " Fach 2"}, {261, " Fach 3"}, {262, " Fach 4"}, {263, " Fach 5"}, {1285, "Nicht bestimmt"}, {1284, "Normal"}, {1513, "HP LaserJet 90 g"}, {1276, "Leicht 60-74g"}, {1514, "Mittelschwer 85-95 g"}, {1279, "Briefpapier"}, {1278, "Recyclingpapier"}, {1515, "HP Color Laser 105 g, m"}, {1516, "HP Premium Choice 120 g"}, {1518, "HP Pr„sentationspapier "}, {1519, "HP Professional 120g, s"}, {1520, "HP Premium Pr„sentation"}, {1257, "Mittleres Gewicht 96-11"}, {1275, "Schwer 111-130g"}, {1271, "Mittleres Gewicht 96-11"}, {1270, "Hochgl„nzend, schwer 11"}, {1523, "HP Broschrenpapier, ma"}, {1525, "HP Broschrenpapier, ho"}, {1274, "Sehr schwer 131-175g"}, {1269, "Hochgl„nzend, sehr schw"}, {1530, "HP Deckblattpapier 200 "}, {1531, "HP Fotopapier, matt 200"}, {1533, "HP Broschrenpapier, ho"}, {1273, "Karton 176-220 g"}, {1272, "Karte 176-220 g, hochgl"}, {1537, "Color Laser-Transparent"}, {1280, "Etiketten"}, {1282, "Briefkopf"}, {1267, "Briefumschlag"}, {1283, "Vorgedruckt"}, {1281, "Vorgelocht"}, {1277, "Farbig"}, {1540, "Rau"}, {1542, "Folie, opak"}}
@Jan
Jetzt verstehe ich.
Ja der Drucker gibt alle Formate her die zum Drucken unterstützt würden jedoch nicht welche aktuell vorhanden sind und benutzt werden können. Weil ich mehrere gleiche A4 Fächer habe muss ich vor der Druckausgabe wissen wieviele dann weiss ich was ich ausgeben muss. Ist z.b. nur 1 A4 Fach vorhanden muss auch das Logo gedruckt werden oder ist kein A5 vorhanden muss für einen bestimmten Druck eine andere Darstellung und A4 genutzt werden. Das kann nicht einfach dem Drucker gesendet werden ohne zu wissen: Hat er das bestimmte Papier tatsächlich.. Die letzten Jahre haben wir im Programm für jeden Drucker festgelegt was vorhanden ist und aus welchen Fach was gedruckt wird. Das hat auch funktoniert. Nun soll dieser Schritt entfernt und die Config des Druckers unter Windows abgefragt und genutzt werden.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2945
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Papiergrösse in Druckschacht abfragen
Ich meine, eine Schachtsetzen zwischen :endPage und :StartPage funktioniert.IHMO nicht möglich während "eines" Druck-Job den Drucker-Schacht zu wechseln.
Viele Grüße
Wolfgang
Wolfgang