Seite 2 von 2

Verfasst: Do, 31. Jan 2008 9:46
von AUGE_OHR
hi,
medmaster 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
dabi fällt mir ein ob das Tool auch aktive war als du deine Test gemacht
hast ? schon mal ohne versucht ?

die 2nd. Frage. wo hängen deine Kyocera im Netzwerk dran ?
... etwa an LPT1 von einer Workstation ?

Ok - Netzwerkdrucker

Verfasst: Do, 31. Jan 2008 12:21
von medmaster
also :
1. wie verhält sich :printerready() bei lokalem Drucker ??
2. wie bei Netwerkdruckern ?
3. wie bei freigegebenen Druckern an anderen Netz-PCs ?
Rainer

Verfasst: Do, 31. Jan 2008 12:49
von brandelh
Hi,

Ich habe nun meinem Netzwerkdrucker (Samsung) und dem USB Canon das Papier entzogen.
Im Windows Druckmanager (ich drucke immer über Spooler) sind alle BEREIT.
Drucke nun aus MS Word, Xbase++ und Testseite aus Druckertreiber.
Immer noch alles BEREIT.
Nach etwas Wartezeit meckern die Druckertreiber fehlendes Papier an.
Aus allen Anwendungen kann ich weiter ohne Fehlermeldung drucken ... geht alles in die Warteschlange und das ist toll, denn so kann ich weiter arbeiten.
Die Druckerwarteschlange gibt trotz der Papierfehlerfenster immer noch BEREIT aus.
Weder MS Word kümmert sich drum, noch Xbase++ gibt etwas anderes als BEREIT zurück.

NUR wenn ich den PC abschalte, an dem ein freigegebener Drucker hängt, das merkt der Druckspooler und meckert, dass der Rechner / Drucker nicht erreichbar ist. Außerdem kann ich meinen Drucker anhalten, das stört MS Word nicht, denn die Warteschlange nimmt ja weiter Aufträge an, aber meine Druckerklasse merkt nun, dass der PrinterStatus nicht mehr READY ist und gibt eine Fehlermeldung (erwünschte MSGBOX) aus. Hier war ich etwas kleinlich, aber es kam vor, dass ein Anwender da rumgespielt hatte und sich danach gewundert hat wo das Papier bleibt ;-)

Auf jeden Fall zeigt es, dass Xbase++ genau die Meldungen erhält, die der WindowsSpooler weitergibt. Also KEIN Fehler in Xbase++ ;-)

Im übrigen hat mein Laser 128 MB (oder waren es mehr ...) Arbeitsspeicher, da passen einige schwarzweiß Seiten rein, bis er merkt, dass er nicht drucken kann 8)

Verfasst: Do, 31. Jan 2008 13:21
von medmaster
Hubert,
ok ..danke .. - also will heissen : das geht mit xBase nicht zu klären ob ein Drucker physikalisch bereit ist, bevor ich drucke ... ??
Rainer

Verfasst: Do, 31. Jan 2008 14:46
von brandelh
Hi,

wenn er an LPTx angeschlossen ist könnte IsPrinter() helfen.
Siehe hierzu in der Hilfe nach.

Bei einem Netzwerkdrucker, der auf LPTx gemappt wurde,
weiß ich nicht wie IsPrinter() reagiert.

Der XbpPrinter() jedenfalls gibt nur das zurück, was der Druckspooler sagt.

Wenn der Netzwerkdrucker ein WEB-Interface hat, kann man das abfragen ...

Ansonsten habe ich mal im PowerBasic Forum danach gefragt, dort sitzen - ähnlich wie bei Delphi - mehr Leute die sehr hardwarenah programmieren, eventuell kommt ja da was raus. Xbase++ kann (fast) alle System-DLLs / API-Funktionen aufrufen und auswerten, man muss nur wissen welche man braucht und was die machen ;-)

Verfasst: Do, 31. Jan 2008 15:28
von medmaster
ok .. isprinter() meldet auch immer ready ....
Irgendwo wird ja windows gemeldet dass es nicht drucken kann ..das muss man wohl irgendwo abfragen und das timeout für die Anwort heruntersetzen. Mal sehn ... was die "Spezialisten" sagen
Rainer

Verfasst: Do, 31. Jan 2008 16:33
von brandelh
Hi,

ich habe einige Antworten erhalten, mit Verweis auf diese Seiten:

http://vcfaq.mvps.org/sdk/15.htm
http://support.microsoft.com/kb/160129/en-us

Dort steht sinngemäß, dass mit der ApiFunktion GetPrinter() die Infos abgefragt werden können, dass aber ab WindowsNT bis auf die Störungen des Spoolers selbst, immer READY zurückgegeben wird.

Ich bin mir sicher, dass XbpPrinter() genau diese Funktion abfragt.

Sobald ein Druckauftrag vorliegt, kann man aber diesen selbst abfragen, ob Fehler aufgetreten sind (falls man als User genug Rechte hat auf
diese zuzugreifen ???).

Die Win32 API Funktion EnumJobs() liefert die Anzahl der Druckjobs eines Druckers zurück. Mit dieser Info kann man dann den ersten Job mit GetJob() abfragen. Wenn kein JOB in der Warteschlage ist, sollte kein Problem bestehen ... die Ergebnisse beider Funktionen stehen in 2 Strukturen.

Im Microsoft Artikel ist ein C-Code angegeben ...

Mit DLLFunction() in Verbindung mit der Win32 Programmers Reference und Kenntnis über API Aufrufe und Zugriffe auf Strukturen, kann man also sicher überprüfen ob ein Druckjob Probleme hatte ...

... ich habe jetzt aber andere Probleme ;-)

Re: Ok - Netzwerkdrucker

Verfasst: Do, 31. Jan 2008 19:09
von AUGE_OHR
hi,
medmaster hat geschrieben: 1. wie verhält sich :printerready() bei lokalem Drucker ??
2. wie bei Netwerkdruckern ?
3. wie bei freigegebenen Druckern an anderen Netz-PCs ?
Das hab ich doch nun Seitenlang geschrieben !!!

Du solltest aber mal die Frage beantworten "wo" deine Testdrucker dran
hängen und ob das Kyocera Tool desinstalliert wurde.

Verfasst: Do, 31. Jan 2008 20:26
von brandelh
Hi,

ich hatte etwas Zeit zum experimentieren in PowerBasic.
Wenn ich die Druckjobs durchgehe, dann meldet EINER davon (der aktuelle - Nummer 0 ) FEHLER + Papier fehlt (0x10). Da ich jedoch 2 Druckertreiber auf einen Drucker installiert habe (PS und PCL), sind auch in der zweiten Druckerschlage Jobs. Dort meldet der letzte (???) den Fehler Papierstau :?

Mal sehen ob ich in den nächsten Tagen das ganze nach Xbase bekomme und eine schöne Funktion draus mache ... den Druckerhandle müssten wir ja im XbpPrinter haben oder ... :?