Ermittlung der Druckerbereitschaft
Moderator: Moderatoren
Ermittlung der Druckerbereitschaft
Hi!
Kann mir jemand sagen, wie ich aus einem xBase-Programm die Bereitschaft eines Druckers ermitteln kann. Mit isprinter() lässt sich lediglich die Druckerbereitschaft am LPT1 ermitteln. Wie kann ich diese Informationen bekommen, wenn der Drucker über einen USB-Anschluss angeschlossen ist oder gar an einem Netzwerk angekoppelt ist?
Ferner würde mich einmal interessieren, ob es eine Möglichkeit gibt, einen schon angelaufenen Druckvorgang mit einem Hotkey abzubrechen.
Vielen Dank im voraus!
Gruß Werner
Kann mir jemand sagen, wie ich aus einem xBase-Programm die Bereitschaft eines Druckers ermitteln kann. Mit isprinter() lässt sich lediglich die Druckerbereitschaft am LPT1 ermitteln. Wie kann ich diese Informationen bekommen, wenn der Drucker über einen USB-Anschluss angeschlossen ist oder gar an einem Netzwerk angekoppelt ist?
Ferner würde mich einmal interessieren, ob es eine Möglichkeit gibt, einen schon angelaufenen Druckvorgang mit einem Hotkey abzubrechen.
Vielen Dank im voraus!
Gruß Werner
- Lewi
- 1000 working lines a day
- Beiträge: 830
- Registriert: Di, 07. Feb 2006 14:10
- Wohnort: Hamburg
- Danksagung erhalten: 2 Mal
Druckerstatus:
Wenn Du unter Verwendung der xBase-Tools programmierst, dann wird Dir die Funktion PrintStat() weiter helfen.
Abbruch eines Druckvorganges:
Ich denke, dass sich ein Druckabbruch unter Verwendung einer Taste nur über das Windows-API realisieren läßt, da der Druckoutput vom Windows-OS gehändelt wird.
Gruß, Olaf
Wenn Du unter Verwendung der xBase-Tools programmierst, dann wird Dir die Funktion PrintStat() weiter helfen.
Abbruch eines Druckvorganges:
Ich denke, dass sich ein Druckabbruch unter Verwendung einer Taste nur über das Windows-API realisieren läßt, da der Druckoutput vom Windows-OS gehändelt wird.
Gruß, Olaf
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
-
- UDF-Programmierer
- Beiträge: 92
- Registriert: Di, 19. Dez 2006 19:37
- Wohnort: Düsseldorf
- Kontaktdaten:
Druckerbereitschaft
Hallo Werner,
mir ist es auch noch nicht gelungen, die Bereitschaft des Druckers an LPT
direkt abzufragen. Ist der Drucker hingegen an einen
COM-Port angeschlossen, funktioniert sogar ISPRINTER().
Ich gehe davon aus, dass Windows eine Abfrage auf
unterster Ebene nicht zulässt.
Die Fehlermeldung kommt nach relativ langer Zeit von
Windows. Ich würde dies auch gerne abfangen.
Gruß
Jürgen
mir ist es auch noch nicht gelungen, die Bereitschaft des Druckers an LPT
direkt abzufragen. Ist der Drucker hingegen an einen
COM-Port angeschlossen, funktioniert sogar ISPRINTER().
Ich gehe davon aus, dass Windows eine Abfrage auf
unterster Ebene nicht zulässt.
Die Fehlermeldung kommt nach relativ langer Zeit von
Windows. Ich würde dies auch gerne abfangen.
Gruß
Jürgen
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Druckerbereitschaft
hi,
gruss by OHR
Jimmy
zeig uns doch mal deinen Code den du verwendest.Juergen hat geschrieben: mir ist es auch noch nicht gelungen, die Bereitschaft des Druckers an LPT
direkt abzufragen. Ist der Drucker hingegen an einen
COM-Port angeschlossen, funktioniert sogar ISPRINTER().
gruss by OHR
Jimmy
-
- UDF-Programmierer
- Beiträge: 92
- Registriert: Di, 19. Dez 2006 19:37
- Wohnort: Düsseldorf
- Kontaktdaten:
Printerport
Hallo Auge_Ohr,
Werte werden aus einer INI-Datei gelesen.
.
.
IF upper(left(cPrinter_Port,3))="COM"
RunShell('/C mode '+cPr_Port+' '+cPr_Baud,,,.t.)
ENDIF
.
.
cPrinter_Port:=upper(left(cPrinter_port,4))
IF !IsPrinter(cPrinter_Port)
ok_ask("Warnung: Der Bondrucker ist nicht bereit !")
ENDIF
Gruß
Jürgen
Werte werden aus einer INI-Datei gelesen.
.
.
IF upper(left(cPrinter_Port,3))="COM"
RunShell('/C mode '+cPr_Port+' '+cPr_Baud,,,.t.)
ENDIF
.
.
cPrinter_Port:=upper(left(cPrinter_port,4))
IF !IsPrinter(cPrinter_Port)
ok_ask("Warnung: Der Bondrucker ist nicht bereit !")
ENDIF
Gruß
Jürgen
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Printerport
hi,
das ganze durch den Windows Druck Spooler sodas du bei ISPRINTER()
immer .T. bekommst.
Unter Xbase++ kann man ja nun auf die Windows Drucker (die man auch
für DOS benutzen kann ) zugreifen. dazu benutzt man XbpPrinter() um
ein Printer Object anzufordern. Analog zu Beispiel der Xbase++ Hilfe hier
ein erweitertes Beispiel mit :PrinterStatus() welches auch für USB oder
Netzwerk funktioniert :
sowas ging mal zu Cl*pper Zeiten unter DOS aber schon bei W95 gingJuergen hat geschrieben: IF upper(left(cPrinter_Port,3))="COM"
RunShell('/C mode '+cPr_Port+' '+cPr_Baud,,,.t.)
ENDIF
cPrinter_Port:=upper(left(cPrinter_port,4))
IF !IsPrinter(cPrinter_Port)
ok_ask("Warnung: Der Bondrucker ist nicht bereit !")
ENDIF
das ganze durch den Windows Druck Spooler sodas du bei ISPRINTER()
immer .T. bekommst.
Unter Xbase++ kann man ja nun auf die Windows Drucker (die man auch
für DOS benutzen kann ) zugreifen. dazu benutzt man XbpPrinter() um
ein Printer Object anzufordern. Analog zu Beispiel der Xbase++ Hilfe hier
ein erweitertes Beispiel mit :PrinterStatus() welches auch für USB oder
Netzwerk funktioniert :
Code: Alles auswählen
FUNCTION PRINTERPS( cPrinter, nCopies ,nPaperBin)
LOCAL oDC := XbpPrinter():New()
LOCAL oPS
LOCAL aPB, i, iMax // Array Paperbins
LOCAL lRaus := .T.
LOCAL lPFail := .F.
LOCAL oDlg, oPrinter,cText,nStatus
LOCAL nDummy
LOCAL aPrint := oDC:list() // Liste aller installierter Drucker
LOCAL nPrint := 0
DEFAULT nCopies TO 1
BEGIN SEQUENCE
//
// suche "meinen" ID_DRUCK Drucker
//
nPrint := ASCAN(aPrint, {|x| (ID_DRUCK) $ UPPER(x) } )
IF nPrint > 0
cPrinter := aPrint[nPrint]
ENDIF
IF cPrinter != NIL // if NIL use Windows default?
cPrinter := TRIM(cPrinter)
ENDIF
//
// so wird ein Printer Object "richtig" angelegt
//
IF oDC:Create( cPrinter ) == oDC // = self
ELSE
MsgBox( "! kann kein Drucker Object anlegen !" )
BREAK // raus
ENDIF
//
// jett können wir den Status überprüfen
//
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 !"+CHR(13)+CHR(10)+Chr(13) +;
"bitte Rechner neu starten und pr
-
- UDF-Programmierer
- Beiträge: 92
- Registriert: Di, 19. Dez 2006 19:37
- Wohnort: Düsseldorf
- Kontaktdaten:
Printerport
Danke Auge_Ohr,
muss Deinen Quellcode ausprobieren.
Grundsätzlich hatte ich für meine Kassensysteme den
entsprechenden Bondruckern keinen Windowsdrucker zugeordnet,
sondern direkt über die Druckerschnittstelle LPTx programmiert.
Von daher ist eine Abfrage, wie Du sie darstellst natürlich nicht
möglich.
Es ist sehr schade, dass man z. B. um den Zustand
der Kassenlade zu überprüfen erst ein OCX-Control einbinden muss,
da die Kassenlade über den Drucker gesteuert wird.
Früher konnte man LPTx Byte für Byte abfragen.
Gruß
Jürgen.
muss Deinen Quellcode ausprobieren.
Grundsätzlich hatte ich für meine Kassensysteme den
entsprechenden Bondruckern keinen Windowsdrucker zugeordnet,
sondern direkt über die Druckerschnittstelle LPTx programmiert.
Von daher ist eine Abfrage, wie Du sie darstellst natürlich nicht
möglich.
Es ist sehr schade, dass man z. B. um den Zustand
der Kassenlade zu überprüfen erst ein OCX-Control einbinden muss,
da die Kassenlade über den Drucker gesteuert wird.
Früher konnte man LPTx Byte für Byte abfragen.
Gruß
Jürgen.
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo,
hier gibt es einen Gerätetreiber zu kaufen, der auch unter XP Hardwarezugriffe erlaubt.
Irgendwann, irgendwo habe ich auch mal einen Freeware-Hardwaretreiber für LPTs gesehen. Ich schau mal, ob ich den Link wiederfinde.
...Gefunden!
InpOut.dll
http://www.logix4u.net/inpout32.htm
Beispielprogramm in VB
http://www.lvr.com/files/test_inpout32_vb6.zip
Alles, was man schon immer über Parallelports wissen wollte
(mit Links zu ähnlich umfangreichen Infos über serielle Ports und USB)
http://www.lvr.com/parport.htm
Viele Grüße,
Günter
hier gibt es einen Gerätetreiber zu kaufen, der auch unter XP Hardwarezugriffe erlaubt.
Irgendwann, irgendwo habe ich auch mal einen Freeware-Hardwaretreiber für LPTs gesehen. Ich schau mal, ob ich den Link wiederfinde.
...Gefunden!
InpOut.dll
http://www.logix4u.net/inpout32.htm
Beispielprogramm in VB
http://www.lvr.com/files/test_inpout32_vb6.zip
Alles, was man schon immer über Parallelports wissen wollte
(mit Links zu ähnlich umfangreichen Infos über serielle Ports und USB)
http://www.lvr.com/parport.htm
Viele Grüße,
Günter