Printerstatus z.B. Papier alle offline etc.
Moderator: Moderatoren
Printerstatus z.B. Papier alle offline etc.
Ich bekomme mit dem printerstatus von xbpPrinter immer nur 1 - also ready - zurück .. nichts anderes - obwohl der Drucker offline oder aus ist - wo und wie bekomm ich all die schönen Einzelstatusmeldungen aus rinterstatus() her ?
Ich möchte nur etwas drucken und in den spooler einstellen, wenn der Drucker definitv online ist ....
Danke für Hinweise ...
Rainer
Ich möchte nur etwas drucken und in den spooler einstellen, wenn der Drucker definitv online ist ....
Danke für Hinweise ...
Rainer
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Printerstatus z.B. Papier alle offline etc.
hi,
http://www.xbaseforum.de/viewtopic.php? ... ter+status
wie wäre es mit dem "suchen" Button oben in der Menuleistemedmaster hat geschrieben: Ich bekomme mit dem printerstatus von xbpPrinter immer nur 1 - also ready - zurück .. nichts anderes - obwohl der Drucker offline oder aus ist - wo und wie bekomm ich all die schönen Einzelstatusmeldungen aus rinterstatus() her ?
Ich möchte nur etwas drucken und in den spooler einstellen, wenn der Drucker definitv online ist ....
Danke für Hinweise ...
http://www.xbaseforum.de/viewtopic.php? ... ter+status
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
also grundsätzlich geht das. Meine Druckerklasse z.B. verweigert den Druck auf OFFLINE Drucker (angehalten, Papier fehlt) und dazu nutze ich oP:printerStatus() ... .
Aber es scheint so, dass nicht alle Druckertreiber diesen Zustand sauber melden. Der Drucker muss bidirektional arbeiten, damit das überhaupt geht.
Mit älteren Xbase++ Versionen gab es - wenn ich mich recht erinnere - damals auch Fehlermeldungen mit der Funktion.
also grundsätzlich geht das. Meine Druckerklasse z.B. verweigert den Druck auf OFFLINE Drucker (angehalten, Papier fehlt) und dazu nutze ich oP:printerStatus() ... .
Aber es scheint so, dass nicht alle Druckertreiber diesen Zustand sauber melden. Der Drucker muss bidirektional arbeiten, damit das überhaupt geht.
Mit älteren Xbase++ Versionen gab es - wenn ich mich recht erinnere - damals auch Fehlermeldungen mit der Funktion.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
nicht nur der Drucker! Es muss auch der richtige parallelport-Treiber unter Windows installiert sein!
Wenn es nicht der ist, der eine Kommunikation in beide Richtungen zulässt, dann klappt nichts!
Ich glaube, der heißt unter XP EPP - kann hier im Büro leider nicht nachschauen, wegen eingeschränkter Rechte...
Viele Grüße,
Martin
nicht nur der Drucker! Es muss auch der richtige parallelport-Treiber unter Windows installiert sein!
Wenn es nicht der ist, der eine Kommunikation in beide Richtungen zulässt, dann klappt nichts!
Ich glaube, der heißt unter XP EPP - kann hier im Büro leider nicht nachschauen, wegen eingeschränkter Rechte...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
und natürlich muss man im BIOS den bidirektionalen Zugriff auch freigegeben haben, sonst geht es auch nicht ...Martin Altmann hat geschrieben:Es muss auch der richtige parallelport-Treiber unter Windows installiert sein!
Am besten schaut man im Druckmanager nach, was Windows zu dem Drucker sagt. Erkennt Windows bzw. der Druckertreiber ob Papier im Drucker ist, ob dieser ausgeschaltet oder offline ist ?
Billige Netzwerkdruckserver liefern auch keine Rückinfos.
Während die eingebauten Druckserver in meinem Samsung CLP-550N bzw. Brother 7820N (beide nur über Ethernet) sauber funktionieren, genauso wie mein HP Deskjet 5550 sowohl über Parralel als auch über USB funktioniert.
Gruß
Hubert
Hubert
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Danke für die Diskussion ..
kurz der Code :
if oPrinter:create(trim(cPrinter))<> NIL
nPrinterstatus:=oPrinter:printerStatus()
errorbox(alltrim(str(nPrinterStatus)))
* ergibt grundsätzlich 1 also ready obwohl der Drucker aus ist
wäre ja dankbar wenn jemand einen funktionsfähigen Code hätte
übrigens : was ergibt bei euch der Printerstatus wenn der Drucker aus ist ???
Rainer
kurz der Code :
if oPrinter:create(trim(cPrinter))<> NIL
nPrinterstatus:=oPrinter:printerStatus()
errorbox(alltrim(str(nPrinterStatus)))
* ergibt grundsätzlich 1 also ready obwohl der Drucker aus ist
wäre ja dankbar wenn jemand einen funktionsfähigen Code hätte
übrigens : was ergibt bei euch der Printerstatus wenn der Drucker aus ist ???
Rainer
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
dein Code ist völlig in Ordnung.
Mein Canon Drucker (i965) z.B. liefert auch immer XBPPRN_STATUS_READY wenn er ausgeschaltet ist. Sobald der Druckjob da ist, schaltet der Druckertreiber den Drucker ein.
Fehlendes Papier oder im Druckertreiber ('Anhalten') eingeschaltete
Druckbeschränkungen werden mit den erwarteten Defines laut Hilfe
gemeldet.
Die Frage also muss lauten, was sagt dir dein Windows über die Druckerwarteschlange, wenn der Drucker ausgeschaltet ist ?
Wenn dort ein Fehler oder OFFLINE steht, erkennt Windows das Problem, ansonsten IST es (für Windows) kein Problem. Nur wenn Windows einen Fehler erkennt, kann Xbase++ darauf reagieren.
dein Code ist völlig in Ordnung.
Mein Canon Drucker (i965) z.B. liefert auch immer XBPPRN_STATUS_READY wenn er ausgeschaltet ist. Sobald der Druckjob da ist, schaltet der Druckertreiber den Drucker ein.
Fehlendes Papier oder im Druckertreiber ('Anhalten') eingeschaltete
Druckbeschränkungen werden mit den erwarteten Defines laut Hilfe
gemeldet.
Die Frage also muss lauten, was sagt dir dein Windows über die Druckerwarteschlange, wenn der Drucker ausgeschaltet ist ?
Wenn dort ein Fehler oder OFFLINE steht, erkennt Windows das Problem, ansonsten IST es (für Windows) kein Problem. Nur wenn Windows einen Fehler erkennt, kann Xbase++ darauf reagieren.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
oPrinter ab und nicht den vom zugewiesenen Device oDC!!!
Das ist nicht unbedingt richtig so. Du fragst den rinterStatus() vonmedmaster hat geschrieben: if oPrinter:create(trim(cPrinter))<> NIL
nPrinterstatus:=oPrinter:printerStatus()
oPrinter ab und nicht den vom zugewiesenen Device oDC!!!
Code: Alles auswählen
FUNCTION PRINTERPS( cPrinter, nCopies, nPaperBin )
LOCAL oDC := XbpPrinter() :New()
LOCAL oPS
LOCAL lPFail := .F.
LOCAL oPrinter, nStatus
DEFAULT nCopies TO 1
BEGIN SEQUENCE
IF oDC:Create( cPrinter ) == oDC // = self
ELSE
MsgBox( "! Drucker ist Offline !" )
BREAK // raus
ENDIF
//
// get :PrinterStatus from oDC
//
nStatus := oDC:PrinterStatus()
DO CASE
CASE nStatus == 1
lPFail := .F. // alles OK
CASE nStatus == - 7
MsgBox( "The Printer is Offline !" )
lPFail := .T.
CASE nStatus == - 6
MsgBox( "The Printer has a failure !" )
lPFail := .T.
CASE nStatus == - 5
MsgBox( "The Printer is not useable !" )
lPFail := .T.
CASE nStatus == - 4 .OR. nStatus == - 1
MsgBox( "The Printer is not ready !" )
lPFail := .T.
CASE nStatus == - 3
MsgBox( "The Printer has no paper !" )
lPFail := .T.
CASE nStatus == - 2
MsgBox( "Der Netzwerk Drucker ist offline !" + ;
"bitte Rechner neu starten und pr
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi Jimmy,AUGE_OHR hat geschrieben:Das ist nicht unbedingt richtig so. Du fragst den rinterStatus() vonmedmaster hat geschrieben: if oPrinter:create(trim(cPrinter))<> NIL
nPrinterstatus:=oPrinter:printerStatus()
oPrinter ab und nicht den vom zugewiesenen Device oDC!!!
Code: Alles auswählen
FUNCTION PRINTERPS( cPrinter, nCopies, nPaperBin ) LOCAL oDC := XbpPrinter() :New() ... nStatus := oDC:PrinterStatus()
ich denke mal sein oPrinter entspricht deinem oDC und ist ein XbpPrinter() Objekt. Das wäre schon richtig so.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
Es muss
heissen damit du vom Device den :PrinterStatus bekommst und
nicht vom Printer Object !
Nope den das :create ist falsch (so wie es im Help File steht.brandelh hat geschrieben:ich denke mal sein oPrinter entspricht deinem oDC und ist ein XbpPrinter() Objekt. Das wäre schon richtig so.medmaster hat geschrieben: if oPrinter:create(trim(cPrinter))<> NIL
nPrinterstatus:=oPrinter:printerStatus()
Es muss
Code: Alles auswählen
IF oDC:Create( cPrinter ) == oDC // = self
nicht vom Printer Object !
gruss by OHR
Jimmy
Jimmy
Printerstatus
Jimmy ..
egal wie auch immer - ich hab den Code von Dir kopiert --leider bekomm ich immer noch IMMER 1 - also Drucker online obwohl er definitiv aus ist (Netz-aus). Der Grund liegt irgendwo auf der Windowsebene. Offensichtlich muss ich das anders anpacken .. - xBASE hilt mir da so nicht, da bereits windows nichts meldet. Der Druckauftrag erscheint in der Queue und nach einer Weile dann unten die übliche Druckerwarnmeldung .. das ganze hängt sich erstmal eine Weile auf, unbrauchbar für eine sichere Druck- und Dokumentenkontrolle.
Ich will einen Druckserver bauen mit voller Kontrolle über bestimmte Druckvorgänge ... hmmm. Die Files (pdf) liegen fertig vor.
Rainer
egal wie auch immer - ich hab den Code von Dir kopiert --leider bekomm ich immer noch IMMER 1 - also Drucker online obwohl er definitiv aus ist (Netz-aus). Der Grund liegt irgendwo auf der Windowsebene. Offensichtlich muss ich das anders anpacken .. - xBASE hilt mir da so nicht, da bereits windows nichts meldet. Der Druckauftrag erscheint in der Queue und nach einer Weile dann unten die übliche Druckerwarnmeldung .. das ganze hängt sich erstmal eine Weile auf, unbrauchbar für eine sichere Druck- und Dokumentenkontrolle.
Ich will einen Druckserver bauen mit voller Kontrolle über bestimmte Druckvorgänge ... hmmm. Die Files (pdf) liegen fertig vor.
Rainer
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rainer,
schau Dir mal die Einstellungen für Deinen Druckertreiber an!
Unter XP findest Du in den Eigenschaften Deines Druckers das Register "Erweitert" - dort solltest Du die Option "Druckaufträge direkt zum Drucker leiten" auswählen anstatt der wahrscheinlich eingestellten "Über Spooler drucken, um Druckaufträge schneller abzuschließen"!
Viele Grüße,
Martin
schau Dir mal die Einstellungen für Deinen Druckertreiber an!
Unter XP findest Du in den Eigenschaften Deines Druckers das Register "Erweitert" - dort solltest Du die Option "Druckaufträge direkt zum Drucker leiten" auswählen anstatt der wahrscheinlich eingestellten "Über Spooler drucken, um Druckaufträge schneller abzuschließen"!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Printerstatus
hi,
Frage : bis du im Alaska Forum unter RCB unterwegs ?
Ich habe 3 Kyocera 1010. Einer ist mit der UB21 Netzwerkkarte bestückt
der 2nd hängt an LPT1 und der dritte an USB. Besonders bei dem Netz-
Werk Drucker hab ich IMMER das offline Problem (vermutlich weil er aus
Standby erst hochfährt) und MUSS es deshalb mehrfach am Tag abfangen
wie es mir auch mein Logbuch zeigt.
Ich habe für die Lösung schlussendlich mit Till´s Hilfe rausbekommen den
der Zusammenhang mit dem Device war mir lange nicht klar. Leider hab
die die Msg nicht z.H. und versuche es mal mit einer "trivialen" Erklärung
Wenn du ein Printer Object mit XbpPrinter anlegst wie in der Hilfe
beschieben dann hast du ein Device unabhängiges Printer Object.
Verwendest du die Methode von mir DANN versucht der ein Device
abhängiges Printer Object zu :create(n). Wenn nun der Vergleich
fehlschlägt (weil der Drucker aus/offline ist) dann kommt ein BREAK und
oPS gibt NIL zurück. Das musst du nun wiederrum abfragen !
Das funktioniert zu 99.999% IMMER !!!
(die 0.001 kann man versuchen mit einem USB Drucker zu "provozieren"
wenn man "gleichzeitig" mit dem ckick auf den ok Button den "Stecker"
der USB Verbindung rauszieht bevor er die erste Seite gedruckt hat...)
kann nicht sein ... entweder du bekommst ein oPS oder ein NILmedmaster hat geschrieben: egal wie auch immer - ich hab den Code von Dir kopiert --leider bekomm ich immer noch IMMER 1 - also Drucker online obwohl er definitiv aus ist (Netz-aus). Der Grund liegt irgendwo auf der Windowsebene.
Frage : bis du im Alaska Forum unter RCB unterwegs ?
Ich habe 3 Kyocera 1010. Einer ist mit der UB21 Netzwerkkarte bestückt
der 2nd hängt an LPT1 und der dritte an USB. Besonders bei dem Netz-
Werk Drucker hab ich IMMER das offline Problem (vermutlich weil er aus
Standby erst hochfährt) und MUSS es deshalb mehrfach am Tag abfangen
wie es mir auch mein Logbuch zeigt.
Ich habe für die Lösung schlussendlich mit Till´s Hilfe rausbekommen den
der Zusammenhang mit dem Device war mir lange nicht klar. Leider hab
die die Msg nicht z.H. und versuche es mal mit einer "trivialen" Erklärung
Wenn du ein Printer Object mit XbpPrinter anlegst wie in der Hilfe
beschieben dann hast du ein Device unabhängiges Printer Object.
Verwendest du die Methode von mir DANN versucht der ein Device
abhängiges Printer Object zu :create(n). Wenn nun der Vergleich
Code: Alles auswählen
IF oDC:Create( cPrinter ) == oDC // = self
oPS gibt NIL zurück. Das musst du nun wiederrum abfragen !
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
**1**
IF oPrinter = NIL
cText := "!!! FEHLER !!! Rechnung Drucker Object konnte aktiviert werden"
MSGBOX( cText )
JOBEMAIL( cText, cText, "OTHER" )
SELECT 4
WSLclose() // CloseAll in WorkSpace
EXITDRUCK() // Stack
RETURN
ENDIF
(die 0.001 kann man versuchen mit einem USB Drucker zu "provozieren"
wenn man "gleichzeitig" mit dem ckick auf den ok Button den "Stecker"
der USB Verbindung rauszieht bevor er die erste Seite gedruckt hat...)
Zuletzt geändert von AUGE_OHR am Do, 31. Jan 2008 21:51, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
wo wir gerade dabei sind vielleicht weiss ja jemand eine Antwort :
Ich schrieb ja gerade über den Kyrocrea mit der Netzwerk Karte.
Der muss ja nun erst aus dem Standby "geweckt" werden. Nun spreche
ich den über eine feste IP-Nummer an ... kann ich den Drucker nicht
irgendwie über "Magic Packet" oder "Wakeup" ansprechen ?
Ich schrieb ja gerade über den Kyrocrea mit der Netzwerk Karte.
Der muss ja nun erst aus dem Standby "geweckt" werden. Nun spreche
ich den über eine feste IP-Nummer an ... kann ich den Drucker nicht
irgendwie über "Magic Packet" oder "Wakeup" ansprechen ?
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi Jimmy,
ich weiß nicht ob wir an einander vorbei reden, aber wenn du die Hilfe anschaust, wirst du feststellen, dass der XbpPresentationSpace() eine Methode device() hat, die - bei zugeordnetem Drucker - das XbpPrinterObject, das ist das device, zurück gibt:
Wenn cDruckerName dann ein gültiger Druckername ist, wird dieser verwenden, ansonsten (also auch bei keinem Parameter) der Standarddrucker !
Deine Zeile
ist deshalb wichtig, weil sie prüft ob tatsächlich ein Druckerobjekt erzeugt wurde und dieses nun in oDC vorhanden ist. Das kann man aber auch über die von Ihm verwendete Form
machen, solange der oDC vorher NIL war.
Sprich man muss sicherstellen, dass man auch ein gültiges Druckerobjekt erzeugt hat, bevor man damit weiterarbeitet.
Seine Probleme rühren aber daher, dass der Druckertreiber / Windows-Spooler - warum auch immer (vermutlich um Strom zu sparen !) - einen ausgeschalteten Drucker als BEREIT bezeichnet.
Da Xbase nur diesen DRUCKERTREIBER abfragen kann, (es sei denn man versucht es über SET PRINTER TO LPT1 etc. ???) kann XbpPrinter() nur das zurückgeben als Status, was Windows meldet !
Win2000, bei dem über einen anderen PC zugeordneten HP5550 Drucker (LPT1) merkt mein Windows, dass der Druckserver (PC ist aus) nicht vorhanden ist und meldet das im Spooler. Der gleiche Drucker unter USB Anschluss, wird als BEREIT angezeigt. Und das stimmt bei ihm auch, denn der Treiber wird den Drucker starten sobald ein Auftrag vorliegt.
Mein Brother Multifunktionscenter (Laser mit Netzwerkdruckserver direkt am Switch) habe ich vor 10 Minuten abgeschaltet und dennoch wird er als BEREIT geführt !
Es ist nun einmal so, dass Windows die Drucker selbst verwalten will und Anwendungsprogramme sich darum nicht zu kümmern haben
ob uns das passt oder nicht. Durch Auswahl eines passenden Druckermodells (Samsung CLP-550 im Büro meldet schnell.) eventuell das anpassen, auch das direkte Drucken oder ähnliche Einstellungen wie von Martin erwähnt, könne nützlich sein, aber Xbase++ kann nicht mehr melden als Windows weitergibt
ich weiß nicht ob wir an einander vorbei reden, aber wenn du die Hilfe anschaust, wirst du feststellen, dass der XbpPresentationSpace() eine Methode device() hat, die - bei zugeordnetem Drucker - das XbpPrinterObject, das ist das device, zurück gibt:
Der XbpPrinter():new():create([cDruckerName]) Aufruf erzeugt - falls erfolgreich, was nicht sein muss - ein Object, das direkt auf den Druckertreiber = Hardwardruckerdevice referenziert.Klasse
XbpPresSpace()
Syntax
:device() --> oDevice | NIL
Wenn cDruckerName dann ein gültiger Druckername ist, wird dieser verwenden, ansonsten (also auch bei keinem Parameter) der Standarddrucker !
Deine Zeile
Code: Alles auswählen
IF oDC:Create( cPrinter ) == oDC
Code: Alles auswählen
IF oDC:Create( ) <> NIL
Sprich man muss sicherstellen, dass man auch ein gültiges Druckerobjekt erzeugt hat, bevor man damit weiterarbeitet.
Seine Probleme rühren aber daher, dass der Druckertreiber / Windows-Spooler - warum auch immer (vermutlich um Strom zu sparen !) - einen ausgeschalteten Drucker als BEREIT bezeichnet.
Da Xbase nur diesen DRUCKERTREIBER abfragen kann, (es sei denn man versucht es über SET PRINTER TO LPT1 etc. ???) kann XbpPrinter() nur das zurückgeben als Status, was Windows meldet !
Win2000, bei dem über einen anderen PC zugeordneten HP5550 Drucker (LPT1) merkt mein Windows, dass der Druckserver (PC ist aus) nicht vorhanden ist und meldet das im Spooler. Der gleiche Drucker unter USB Anschluss, wird als BEREIT angezeigt. Und das stimmt bei ihm auch, denn der Treiber wird den Drucker starten sobald ein Auftrag vorliegt.
Mein Brother Multifunktionscenter (Laser mit Netzwerkdruckserver direkt am Switch) habe ich vor 10 Minuten abgeschaltet und dennoch wird er als BEREIT geführt !
Es ist nun einmal so, dass Windows die Drucker selbst verwalten will und Anwendungsprogramme sich darum nicht zu kümmern haben
ob uns das passt oder nicht. Durch Auswahl eines passenden Druckermodells (Samsung CLP-550 im Büro meldet schnell.) eventuell das anpassen, auch das direkte Drucken oder ähnliche Einstellungen wie von Martin erwähnt, könne nützlich sein, aber Xbase++ kann nicht mehr melden als Windows weitergibt
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
geht. Alledings ist, wie im Help Sample, das prüfen auf NIL nicht die
geeignete Methode weil du ja eben (fast) immer ein Druckerobject :create
kann nur ob es gültiges ist ...
REG Hack (leider nicht z.H.) mit dem man das verändern kann. Es wirkt
dann so ähnlich wie bei USB Festplatten "schnelles Entfernen".
Der letzte Satz mit gültiges Druckerobjekt ist genau das worum esbrandelh hat geschrieben:ist deshalb wichtig, weil sie prüft ob tatsächlich ein Druckerobjekt erzeugt wurde und dieses nun in oDC vorhanden ist. Das kann man aber auch über die von Ihm verwendete FormCode: Alles auswählen
IF oDC:Create( cPrinter ) == oDC
machen, solange der oDC vorher NIL war.Code: Alles auswählen
IF oDC:Create( ) <> NIL
Sprich man muss sicherstellen, dass man auch ein gültiges Druckerobjekt erzeugt hat, bevor man damit weiterarbeitet.
geht. Alledings ist, wie im Help Sample, das prüfen auf NIL nicht die
geeignete Methode weil du ja eben (fast) immer ein Druckerobject :create
kann nur ob es gültiges ist ...
ja USB ... da dauert das timeout viel zu lange ... aber da hab ich einenbrandelh hat geschrieben: Der gleiche Drucker unter USB Anschluss, wird als BEREIT angezeigt.
REG Hack (leider nicht z.H.) mit dem man das verändern kann. Es wirkt
dann so ähnlich wie bei USB Festplatten "schnelles Entfernen".
gruss by OHR
Jimmy
Jimmy
ok.. - Jimmy - also bei Dir arbeitet die Statusfeststellung einwandfrei : Du schaltest den Drucker aus und dann wird das sofort beim Druckversuch gemeldet ? hmm .. das wäre für mich hier ein Wunder bei gleichem Code .. *g* .. Spass beiseite .. : bitte versuche eine Erklärung warum das bei mir nicht geht - bei gleichem Code !
Und wieso kann Kyocera das mit Delphi wunderbar lösen .. ? Die analysieren jeden Drucker im Netz auf seine Funktion .. fragen die Drucker in einem periodischen Thread ab ... wunderbar .. *grübel*
Rainer
Und wieso kann Kyocera das mit Delphi wunderbar lösen .. ? Die analysieren jeden Drucker im Netz auf seine Funktion .. fragen die Drucker in einem periodischen Thread ab ... wunderbar .. *grübel*
Rainer
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
ganz einfach, es liegt nicht am Xbase++ code sondern an Windows, der HARDWARE und der Druckertreiber Software.medmaster hat geschrieben:ok.. - Jimmy - also bei Dir arbeitet die Statusfeststellung einwandfrei : Du schaltest den Drucker aus und dann wird das sofort beim Druckversuch gemeldet ? hmm .. das wäre für mich hier ein Wunder bei gleichem Code .. *g* .. Spass beiseite .. : bitte versuche eine Erklärung warum das bei mir nicht geht - bei gleichem Code !
Und wieso kann Kyocera das mit Delphi wunderbar lösen .. ? Die analysieren jeden Drucker im Netz auf seine Funktion .. fragen die Drucker in einem periodischen Thread ab ... wunderbar .. *grübel*
Rainer
Der Drucker HERSTELLER kann alles, denn der nutzt Funktionen die er speziell im Drucker eingebaut hat, wie gesagt, meine Samsung CLP Netzwerkdrucker reagieren sehr schnell auf die Probleme die der Drucker anzeigt. Die kann man auch über das Netzwerk überwachen, normale für lokale Anwendung gedachte Drucker kümmern sich darum nicht.
Eventuell nutzen die mit Delphi auch Win32API Funktionen, das kann man auch aus Xbase++ heraus, wenn man weiß welche man verwenden soll, die Win32API ist recht groß ... oder sie haben einen TcpIp Server auf der Karte installiert und steuern darüber oder über SNMP ?
Was passiert denn bei dir, wenn du im Druckermanager einen Drucker auf OFFLINE oder ANHALTEN stellst ? Ich bekomme dann immer einen Wert ungleich READY.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
a.) Kyocera Treiber NICHT die von Windows (ich hab 4.1.2115)
b.) Bidirektionale Unterstützung aktivieren
c.) NICHT den Druckerpool aktivieren
d.) "immer verfügbar"
e.) Druckaufträge direkt zum Drucker leiten
f.) KEINEN Harken bei Druckaufträge im Spooler tzerst drucken
g.) Druckprozessor WinPrint/RAW
h.) ich habe noch Zusatz RAM als RAM-Disk im Drucker und 2 Schächte
JA !!!medmaster hat geschrieben: ok.. - Jimmy - also bei Dir arbeitet die Statusfeststellung einwandfrei : Du schaltest den Drucker aus und dann wird das sofort beim Druckversuch gemeldet ? hmm .. das wäre für mich hier ein Wunder bei gleichem Code .. *g* .. Spass beiseite .. : bitte versuche eine Erklärung warum das bei mir nicht geht - bei gleichem Code !
a.) Kyocera Treiber NICHT die von Windows (ich hab 4.1.2115)
b.) Bidirektionale Unterstützung aktivieren
c.) NICHT den Druckerpool aktivieren
d.) "immer verfügbar"
e.) Druckaufträge direkt zum Drucker leiten
f.) KEINEN Harken bei Druckaufträge im Spooler tzerst drucken
g.) Druckprozessor WinPrint/RAW
h.) ich habe noch Zusatz RAM als RAM-Disk im Drucker und 2 Schächte
frage das die Jungs im Delphi Forummedmaster hat geschrieben: Und wieso kann Kyocera das mit Delphi wunderbar lösen .. ? Die analysieren jeden Drucker im Netz auf seine Funktion .. fragen die Drucker in einem periodischen Thread ab ... wunderbar .. *grübel*
Zuletzt geändert von AUGE_OHR am Do, 31. Jan 2008 21:47, insgesamt 1-mal geändert.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi medmaster,AUGE_OHR hat geschrieben:frage das die Jungs im Delphi Forummedmaster hat geschrieben: Und wieso kann Kyocera das mit Delphi wunderbar lösen .. ? Die analysieren jeden Drucker im Netz auf seine Funktion .. fragen die Drucker in einem periodischen Thread ab ... wunderbar .. *grübel*
wenn du einen funktionierenden Delphi Code hast, kannst du ihn ja mal posten. Eventuell kann man das direkt umsetzen. Aus meiner Sicht gibt es mehrere Möglichkeiten wie "es" gehen könnte:
1. Es gibt für Delphi eine Zusatzbibliothek die sowas regelt und in Delphi erstellt wurde.
Es gibt viele hardwarenahe Delphi Zusatzbibliotheken, davon können wir nur träumen. Wenn es eine DLL ist, könnte man die eventuell nutzen ?
2. Sie verwenden Windows API Aufrufe oder direkt API Aufrufe des Druckertreibers. In diesem Falle müsste es gut möglich sein diese in Xbase++ nachzubilden.
3. Sie verwenden ein WEB-Verwaltungs-Interface des Druckers. In diesem Falle müsste das ohne Probleme mit LoadFromUrl() auch in Xbase++ gehen. LoadFromUrl() gibt es im Quellcode von PHIL (per PM emailadresse an mich übermitteln und ich sende dir eine- Phils site ist nicht mehr erreichbar) oder über die ASINET.
4. Sie verwenden das Netzwerk Management Protokoll (SNMP). Auch dieses müsste über API / DLL Aufrufe machbar sein, wenn man denn weiß, was man machen muss.
Auf jeden Fall müssen die Jungs viel Ahnung von genau dem Drucker haben, wenn sie an Windows vorbei Informationen vom Drucker abfragen können.
Gruß
Hubert
Hubert
Jimmy ...
"JA !!!
a.) Kyrocera Treiber NICHT die von Windows (ich hab 4.1.2115)
b.) Bidirektionale Unterstützung aktivieren
c.) NICHT den Druckerpool aktivieren
d.) "immer verfügbar"
e.) Druckaufträge direkt zum Drucker leiten
f.) KEINEN Harken bei Druckaufträge im Spooler tzerst drucken
g.) Druckprozessor WinPrint/RAW
h.) ich habe noch Zusatz RAM als RAM-Disk im Drucker und 2 Schächte -"
... hab alles so gemacht ... auf zwei Rechnern Drucker immer bereit *g*
keine Ahnung ... hmmm. Die Delphileute schaffen das auch mit den anderen Druckern. Also zumindest sollte es möglich sein, abzufragen ob ein Drucker online ist - das würde genügen ..
Rainer
a.) Kyrocera Treiber NICHT die von Windows (ich hab 4.1.2115)
b.) Bidirektionale Unterstützung aktivieren
c.) NICHT den Druckerpool aktivieren
d.) "immer verfügbar"
e.) Druckaufträge direkt zum Drucker leiten
f.) KEINEN Harken bei Druckaufträge im Spooler tzerst drucken
g.) Druckprozessor WinPrint/RAW
h.) ich habe noch Zusatz RAM als RAM-Disk im Drucker und 2 Schächte -"
... hab alles so gemacht ... auf zwei Rechnern Drucker immer bereit *g*
keine Ahnung ... hmmm. Die Delphileute schaffen das auch mit den anderen Druckern. Also zumindest sollte es möglich sein, abzufragen ob ein Drucker online ist - das würde genügen ..
Rainer
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Jimmy ...
hi,
öffne mal deine System Drucker Auswahl. Nun siehst du ja alle Drucker.
Stelle den Kyocera mal auf "Standart Drucker". Nun stelle den Kyocera
Offline und beobachte ob das Drucker Icon "grau" wird. Wenn es nun
soweit ist dann starte nochmals meine PrinterPS Routine und er meldet
Offline.
Sollte das Drucker Icon NICHT "grau" werden dann ist es ein Windows
Problem bei dir und er wird dir immer .T. zurück geben.
hm ... komisch ...medmaster hat geschrieben: ... hab alles so gemacht ... auf zwei Rechnern Drucker immer bereit *g*
öffne mal deine System Drucker Auswahl. Nun siehst du ja alle Drucker.
Stelle den Kyocera mal auf "Standart Drucker". Nun stelle den Kyocera
Offline und beobachte ob das Drucker Icon "grau" wird. Wenn es nun
soweit ist dann starte nochmals meine PrinterPS Routine und er meldet
Offline.
Sollte das Drucker Icon NICHT "grau" werden dann ist es ein Windows
Problem bei dir und er wird dir immer .T. zurück geben.
Zuletzt geändert von AUGE_OHR am Do, 31. Jan 2008 21:47, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
Nach ich im Alaska Forum auch eine heftige Disscusion wegen des selben
Thema habe und er einen lauffähigen Code (naja die gra.ch fehlt noch)
ins Forum gestellt hat hab ich noch paar Test gemacht.
Hardware : 3x Kyocera 1010
Drucker vor dem booten angeschaltet !
a.) Netzwerk auf den eingebauten UB21 Print-Server -> ok
b.) USB vom Notebook -> ok
mit ok heist nach dem abschalten -> Druck Versuch -> Icon wird "grau"
Drucker einschalten -> Druck Versuch -> druckt -> Icon "normal"
beides geht mit meine Code wie "gewünscht" während der andere Code
"versagt" und das Icon wird auch nicht "grau".
1.) Drucker an LPT1 vor dem booten AUS (!) -> JA -> Icon wird "grau"
2.) vor dem booten AN (!) und vor Druck aus -> NEIN -> Spooler ???
Ja heist hier er "merkt" Offline
Er macht das Icon also nur "grau" wenn vor dem booten der Drucker an
LPT1 aus war. Beim anderen Code wird nichts "grau"
Warum er allerdings den Spooler aufruft verstehe ich nicht den ich hab
"eigendlich" abgestellt ...
auffällig war nun das beim "anderen" Code die Icon nie "grau" wurden
und nur bei solchen funktioniert ja meine Routine weil ich das "sah" als
ich mit USB probiert habe. Genau den Effekt hab ich dann natürlich Alaska
versucht mitzuteilen weil die das Problem nicht nachvollziehen konnten
(Netzwerk Print Server & Standby timout) aber es sich wie USB verhält
wenn man den USB-"Stecker zieht".
Vieleicht verursacht die Routine die ich von Alaska bekommen habe
tatsächlich eine IDSC Fehler der dann den "grau" Effekt verursacht,
aber ich habe in den Jahren noch keinen Side Effekt gesehen.
Witzig ist vielleich noch die Entwicklung der Geschichte : Speziell der
erste Druck am morgen ging "daneben". Also hab ich den Mädels dann
gesagt sie mögen den Drucker morgens abstellen (lief natürlich die ganz
Nacht), mit Papier füttern und dann anschalten bevor sie den PC
hochfahren. Damit war das Problem "morgens" behoben und hat sich
dann zum "mittag" verschoben ... nach der Mittags Pause trat dann
das Problem auf ... auf jeden Fall immer wenn zwischen dem letzte Druck
einige Zeit vergangen war wie mir das Logbuch sagte. Da kam ich erst
auf ein mögliches Standby Problem was ich von Nadeldruckern nicht
kannte
Nach ich im Alaska Forum auch eine heftige Disscusion wegen des selben
Thema habe und er einen lauffähigen Code (naja die gra.ch fehlt noch)
ins Forum gestellt hat hab ich noch paar Test gemacht.
Hardware : 3x Kyocera 1010
Drucker vor dem booten angeschaltet !
a.) Netzwerk auf den eingebauten UB21 Print-Server -> ok
b.) USB vom Notebook -> ok
mit ok heist nach dem abschalten -> Druck Versuch -> Icon wird "grau"
Drucker einschalten -> Druck Versuch -> druckt -> Icon "normal"
beides geht mit meine Code wie "gewünscht" während der andere Code
"versagt" und das Icon wird auch nicht "grau".
1.) Drucker an LPT1 vor dem booten AUS (!) -> JA -> Icon wird "grau"
2.) vor dem booten AN (!) und vor Druck aus -> NEIN -> Spooler ???
Ja heist hier er "merkt" Offline
Er macht das Icon also nur "grau" wenn vor dem booten der Drucker an
LPT1 aus war. Beim anderen Code wird nichts "grau"
Warum er allerdings den Spooler aufruft verstehe ich nicht den ich hab
"eigendlich" abgestellt ...
auffällig war nun das beim "anderen" Code die Icon nie "grau" wurden
und nur bei solchen funktioniert ja meine Routine weil ich das "sah" als
ich mit USB probiert habe. Genau den Effekt hab ich dann natürlich Alaska
versucht mitzuteilen weil die das Problem nicht nachvollziehen konnten
(Netzwerk Print Server & Standby timout) aber es sich wie USB verhält
wenn man den USB-"Stecker zieht".
Vieleicht verursacht die Routine die ich von Alaska bekommen habe
tatsächlich eine IDSC Fehler der dann den "grau" Effekt verursacht,
aber ich habe in den Jahren noch keinen Side Effekt gesehen.
Witzig ist vielleich noch die Entwicklung der Geschichte : Speziell der
erste Druck am morgen ging "daneben". Also hab ich den Mädels dann
gesagt sie mögen den Drucker morgens abstellen (lief natürlich die ganz
Nacht), mit Papier füttern und dann anschalten bevor sie den PC
hochfahren. Damit war das Problem "morgens" behoben und hat sich
dann zum "mittag" verschoben ... nach der Mittags Pause trat dann
das Problem auf ... auf jeden Fall immer wenn zwischen dem letzte Druck
einige Zeit vergangen war wie mir das Logbuch sagte. Da kam ich erst
auf ein mögliches Standby Problem was ich von Nadeldruckern nicht
kannte
Zuletzt geändert von AUGE_OHR am Do, 31. Jan 2008 21:48, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
genau aus den Gründen gibt es doch den Windowsspooler.
M$ möchte, dass man sich nicht direkt um die Hardware kümmert.
Ein Programm sendet seine Druckdaten zum Drucker.
Erst wenn der dann druckt, kann es dazu kommen, dass der Drucker einen Fehler übergibt. Ab und an prüft zwar auch der Druckspooler, aber eher selten, sonst wäre der Netzwerkverkehr auch enorm.
Im PowerBasic Forum wurde ich - bei einem anderen Problem - mal belehrt, dass es DOS Denken ist, zuerst zu prüfen ob der Drucker an ist, die Diskette eingelegt etc. Diese Prüfung würde nie garantieren, dass später nicht doch noch ein Fehler auftritt und ginge automatisch davon aus, dass diesem Programm das Gerät gehört.
Unter Windows prüft man nicht, man druckt, schreibt etc. und erstellt im Programm nur Routinen die prüfen ob ein Fehler aufgetreten ist.
Erst beim Drucken wird dann eventuell der Rechner über fehlendes Papier aufgeklärt, dann reagiert der Druckspooler / Druckertreiber, denn das eigentliche Programm hat die Daten ja schon versandt !
Ich verstehe schon - und hätte es auch manchmal gerne gemacht, dass man abspeichern möchte, dass ein Brief etc. gedruckt wurde. Windows kann dies aber nicht garantieren. DOS konnte es auch nicht, denn ein leeres Farbband hat auch der Nadler nicht erkannt. Ob der Brief aber nach dem Drucken gleich in den Papierkorb geflogen ist, weil der SB keine Lust hatte kann kein System wirklich überwachen.
Um den Ausfall von z.B. Netzwerkservern etc. zu bemerken kann man dort eine kleine Datei öffnen und ab und an darauf zugreifen. Einen Druckjob zum Druckertesten, wäre aber Papierverschwendung.
genau aus den Gründen gibt es doch den Windowsspooler.
M$ möchte, dass man sich nicht direkt um die Hardware kümmert.
Ein Programm sendet seine Druckdaten zum Drucker.
Erst wenn der dann druckt, kann es dazu kommen, dass der Drucker einen Fehler übergibt. Ab und an prüft zwar auch der Druckspooler, aber eher selten, sonst wäre der Netzwerkverkehr auch enorm.
Im PowerBasic Forum wurde ich - bei einem anderen Problem - mal belehrt, dass es DOS Denken ist, zuerst zu prüfen ob der Drucker an ist, die Diskette eingelegt etc. Diese Prüfung würde nie garantieren, dass später nicht doch noch ein Fehler auftritt und ginge automatisch davon aus, dass diesem Programm das Gerät gehört.
Unter Windows prüft man nicht, man druckt, schreibt etc. und erstellt im Programm nur Routinen die prüfen ob ein Fehler aufgetreten ist.
Erst beim Drucken wird dann eventuell der Rechner über fehlendes Papier aufgeklärt, dann reagiert der Druckspooler / Druckertreiber, denn das eigentliche Programm hat die Daten ja schon versandt !
Ich verstehe schon - und hätte es auch manchmal gerne gemacht, dass man abspeichern möchte, dass ein Brief etc. gedruckt wurde. Windows kann dies aber nicht garantieren. DOS konnte es auch nicht, denn ein leeres Farbband hat auch der Nadler nicht erkannt. Ob der Brief aber nach dem Drucken gleich in den Papierkorb geflogen ist, weil der SB keine Lust hatte kann kein System wirklich überwachen.
Um den Ausfall von z.B. Netzwerkservern etc. zu bemerken kann man dort eine kleine Datei öffnen und ab und an darauf zugreifen. Einen Druckjob zum Druckertesten, wäre aber Papierverschwendung.
Gruß
Hubert
Hubert