LPT unter Windows 10 Verion 1511

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo,

ich habe meinen neuen PC direkt mit der aktuellen Windows Version installiert und sehe nun, dass meine Xbase-Programme nicht mehr drucken können.
Im Programm steht:

Code: Alles auswählen

  SET DEVICE TO printer
  SET PRINTER TO &drucker1
Die Fehlermeldung lautet:
oError:args :
-> VALTYPE: N VALUE: 24
-> VALTYPE: C VALUE: LPT1.prn
-> VALTYPE: L VALUE: .F.
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: Y
oError:cargo : NIL
oError:description : Operating system error
oError:filename :
oError:genCode : 40
oError:operation : set
oError:osCode : 2
oError:severity : 2
oError:subCode : 4
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0

Die Suche im Internet zeigt, dass das Verhalten bekannt, es aber keine Lösung dazu gibt. Anscheinend sind das die ersten Schritte von Microsoft, alte Schnittstellen abzuschaffen.

Hat jemand das Verhalten auch schon beobachten können oder eine Lösung dazu?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von brandelh »

WENN der Druckertreiber altes Drucken unterstützt (PCL4 etc.), wie einige teurere Laserdrucker,
kann man die Druckausgabe auf LPT umlenken (wie ein Netzwerkdrucker) ...

Meist trifft man heute jedoch auf Tintenstrahldrucker und die sind gerade NICHT an LPT Schnittstellen zu finden.

Man kann versuchen direkt auf das Druckerobjekt zu drucken, ob das aber mit jedem tintenstrahldrucker funktioniert weiß ich nicht.

SET PRINTER TO OBJECT <oXbpPrinter>

Wenn das tatsächlich gedruckt werden soll (Textdateien erzeugt man mit set alternate), sind die Ergebnisse auf jeden Fall dürftig.

Es ist Zeit auf XbpPrinter(), Reportgeneratoren oder meine Druckerklasse (HBPrintX) auszuweichen.
Die Ergebnisse stimmen auf jedem Drucker unter Windows,
sehen gut aus (Farbe, Schriftarten, Spalten etc.),
Bilder und Barcodes sind auch möglich.
Gruß
Hubert
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo Hubert,

in diesem Fall sind es Epson Matrixdrucker, die an Netzwerk Printservern angeschlossen sind.
Unter Windows gibt es einen Druckerpool mit dem LPTx und dem IP-Anschluss.

Entschuldige die Anfängerfrage; wie muss ich denn meine Programmierung abändern?
Am liebsten würde ich direkt den Printserver benutzen.

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von brandelh »

Epson Nadeldrucker ... im Grafikmodus oder im Text Modus ?

Im Grafikmodus sind die sehr langsam (aus dem Gedächtnis ... ist lange her), verhalten sich aber wie Windowsdrucker.
Für Xbase++ Grafikdruck braucht man ein Windows Drucker Objekt.
Wenn es ein Windowsdruckerobjekt gibt, kann man es mit XbpPrinter() oder XbpPrinterDialog() ansprechen bzw. auswählen.
Meine Druckerklasse ist in der Wissensbasis zu finden, mit Beispielen, aber natürlich muss man in beiden Fällen dazu lernen.

Wo ein Netzwerkdrucker ist kann man normal auch ein lokales Windowsdruckerobjekt hinzufügen (über den Druckerserver)

Wenn die Freigabe über einen Windows Rechner (bis 7) erfolgt, nimmt man

NET USE \\Rechnername\Druckerfreigabename ... (NET USE /? zeigt die Parameter an)

Ob das unter Windows 8 und 10 noch geht kann ich nicht sagen.

Ich habe alle meine Programme vor Jahren auf grafischen Druck umgestellt.

Hier ein einfaches Beispiel wie man mit der Methode SAY druckt (für einfache Druckausgaben):

Code: Alles auswählen

*#### ANSI .t. äöü ÄÖÜ ß !!!!
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "xbpdev.ch"


*---------------- Fonts nur einmal erzeugen - create fonts only once ------

procedure main
local oHBPrinter, nRow, nCol, nCPI, nFont

SET CHARSET TO ANSI

*    nur für Tests - only for debugging

#ifdef __WIN32__
   set alternate to log.txt
#else
   set alternate to log2.txt
#endif
set alternate on


? "Test_SAY.EXE - Printertest"
oHBPrinter := HBPrinter():New():create()
if oHBPrinter:IsPrinterError()             // Fehler verhindern, avoid errors
   ?
   ? "Standarddrucker ist nicht verfügbar !"
   ? "Standardprinter is not ready !"
   ?
   ? "Status: ",oHBPrinter:printerStatus(),"=",cPrinterStatus(oHBPrinter:printerStatus())
   ?
   ?
   wait
else

   nFont := 1

   nCPI  := { 10, 12, 17, 10 }[nFont]

   // The fonts are not exactly the same size, and may depend on the printer
   // or printersetting (:setFontMode( [<nMode>] )
   // Die Fontgröße sind nicht genau gleich. Außerdem können Sie vom
   // Druckermodell bzw. der Druckereinstellung abhängen (:setFontMode( [<nMode>] )

   // oHBPrinter:setFontMode(XBPPRN_FONTMODE_GRAPHIC)
   oHBPrinter:addFont("12.Courier New" ) // -> 10CPI
   oHBPrinter:addFont("10.Courier New" ) // -> 12CPI
   oHBPrinter:addFont(" 7.Courier New" ) // -> 17CPI
   oHBPrinter:addFont("12.Verdana" )     // why not, but don't use Blanks to format.

   oHBPrinter:SetFont(nFont)
   oHBPrinter:StartDoc("SAY Print")

   for nRow := 1 to 70
     do case
       case nRow == 7
         for nCol := 1 to 9
             oHBPrinter:say(nRow,nCol*10,nCol,,10)
         next
       case nRow == 8
         oHBPrinter:say(nRow,1,"         1         2         3         4         5         6         7         8         9",,nCPI)
       case nRow == 9
         for nCol := 1 to 9
             oHBPrinter:say(nRow,nCol*10,nCol,,nCPI)
         next
       case nRow == 10
         oHBPrinter:say(nRow,1,"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-",,nCPI)
       otherwise
         oHBPrinter:say(nRow,11,"Zeile / Row: "+str(nRow,3),,nCPI)
     endcase
   next
   oHBPrinter:say(15,30,oHBPrinter:DevName)
   oHBPrinter:say(16,30,"iiiii")
   oHBPrinter:say(17,30,"mMmmm")
   oHBPrinter:say(19,30,":compoundname")
   oHBPrinter:say(20,30,":nominalPointSize")
   oHBPrinter:say(21,30,":fixed")
   oHBPrinter:say(19,50,oHBPrinter:SetFont():compoundname)
   oHBPrinter:say(20,50,oHBPrinter:SetFont():nominalPointSize)
   oHBPrinter:say(21,50,oHBPrinter:SetFont():fixed)

   oHBPrinter:newPage()
   oHBPrinter:say(15,30,"NewPage()")

   for nRow := 1 to 70
     do case
       case nRow == 9
         oHBPrinter:say(nRow,1,"         1         2         3         4         5         6         7         8         9")
       case nRow == 10
         oHBPrinter:say(nRow,1,"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-")
       otherwise
         oHBPrinter:say(nRow,11,"Zeile / Row: "+str(nRow,3))
     endcase
   next
   oHBPrinter:EndDoc()

endif

? "END"
inkey(5)


quit


return
und hier mit den normalen auf 1/10 mm basierenden Auflösungen druckt (mischen ist kein Problem):

Code: Alles auswählen

*#### ANSI .t. äöü ÄÖÜ ß !!!!
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "XBPDEV.ch"


*---------------- Fonts nur einmal erzeugen - create fonts only once ------
procedure main
local oHBPrinter,getlist := {} , cEAN13_Nr := space(13)

SET CHARSET TO ANSI

cls
@1,1 say "len()=12 -> will calculate 13. position; len()=13 -> no change"
@3,1 say "EAN13-Nr.: " get cEAN13_Nr picture "9999999999999"
set cursor on
set confirm on

read

if empty(cEAN13_Nr)
   quit
endif


? "-"+curdrive()+"-"+curdir()+"- Vor Create"

oHBPrinter := HBPrinter():New():create()   // Bei Netzwerkdruckern kann es vorkommen, dass
                                           // diese nicht verfügbar sind, dann fehlen alle
                                           // Infos zum Drucker und es kommt zu Laufzeitfehlern
                                           // if your network printer is not available
                                           // there will be runtime errors


? "-"+curdrive()+"-"+curdir()+"- Nach Create"

if oHBPrinter:IsPrinterError()             // Fehler verhindern, avoid errors

? "-"+curdrive()+"-"+curdir()+"- Nach ERROR"

   ?
   ? "Drucker ist nicht verfügbar !"
   ? "Printer is not ready !"
   ?
   ? "Status: ",oHBPrinter:printerStatus(),"=",cPrinterStatus(oHBPrinter:printerStatus())

else

   oHBPrinter:addFont("10.Arial")
   oHBPrinter:setFont(1)

   ?
   ? "Printer name:     ",oHBPrinter:devName
   ? "Printer comment:  ",oHBPrinter:comment
   ? "Printer port:     ",oHBPrinter:devPort
   ? "Printer location: ",oHBPrinter:location
   ?

? "-"+curdrive()+"-"+curdir()+"- Vor StartDoc"

   oHBPrinter:StartDoc()

? "-"+curdrive()+"-"+curdir()+"- Nach StartDoc"

   oHBPrinter:PrintText(200,200,"Testdruck für Barcode")
   oHBPrinter:PrintBarCodeEan13(200,500,cEAN13_Nr)

? "-"+curdrive()+"-"+curdir()+"- Vor EndDoc"


   oHBPrinter:EndDoc()

? "-"+curdrive()+"-"+curdir()+"- Nach EndDoc"

endif

? "Ende"

wait


return
Gruß
Hubert
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo Hubert,

es geht nur um Textdruck.
Ich möchte jetzt möglichst wenig Änderungen vornehmen, da das Programm teilweise schon seeeehr alt ist.

Viele Grüße
Ingo
Viele Grüße
Ingo
Leon
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 118
Registriert: Mi, 28. Nov 2007 12:48
Wohnort: Wien
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von Leon »

IngoM hat geschrieben:es geht nur um Textdruck.
Ich möchte jetzt möglichst wenig Änderungen vornehmen, da das Programm teilweise schon seeeehr alt ist.
Mit NET USE LPT1 \\PRINTSERVER\DRUCKERNAME aus einem Commandfenster sollte der Druck auf LPT1 keinen Fehler bringen, auch unter W10 nicht. Da muss auch nichts im Programm geändert werden.
Gruß aus Wien
Leon
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LPT unter Windows 10 Verion 1511

Beitrag von AUGE_OHR »

hi,
IngoM hat geschrieben:

Code: Alles auswählen

  SET DEVICE TO printer
  SET PRINTER TO &drucker1
-> VALTYPE: C VALUE: LPT1.prn
hm ... wo kommt das ".PRN" her ?

ein NET USE (Lanmanager) würde ich nicht mehr nehmen. wähle einen "lokalen" (!) Drucker mit "TCP/IP - Standart Port" und trage die IP ein.
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hi Leon und Jimmy,

ein NET USE möchte ich nicht verwenden. Eine Lösung mit direkter Verwendung der IP-Adressen erscheint mir günstiger.
Ich beschreibe noch mal die genaue Situation.

Das Programm ist noch reiner Clipper-Code und liegt, zusammen mit den Daten, auf einem Small Business Server 2011.
Die PCs laufen unter Windows 7 Pro 32bit.
Bei den Druckern handelt es sich um Epson-Nadeldrucker im Textmodus. Die Drucker sind mit 1-Port Printservern mit dem Netzwerk verbunden.
Auf den PCs gibt es Druckerpools mit LPTx und einem lokal definierten IP-Anschluss.
Wird jetzt, wie am Anfang beschrieben, aus dem Programm gedruckt, ist der IP-Port immer verfügbar und der Druck wird über das Netzwerk ausgeführt.

Jimmy, wie sieht die Syntax mit IP-Adresse aus?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von Jan »

Ingo,

irgendwann wirst Du den Code anpassen müssen. Du kannst nicht erwarten das ein Code, der für Hardware und Betriebssystem von vor 20 Jahren geschrieben wurde, auf ewig mit den aktuellen Gegebenheiten klar kommen kann.

Meistens gibt es relativ einfache Möglichkeiten, um wenigstens noch ein wenig Zeit zu schinden. Aber Du mußt am Code was ändern. Vermutlich wird es reichen wenn Du einfach nur ein Druckerobject erstellst und den Druck, so wie der jetzt codiert ist, dahin schickst. Sowas habe ich z. B. mit einer alten Kassensoftware gemacht, die weiterhin per ? und ?? auf dem Bondrucker ausgibt. Das geht da auch über einen Printserver.

In der aktuellen c't gibt es übrigens einen kurzen Artikel, der auf dieses Thema eingeht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo Jan,

in der c't bin ich noch nicht so weit gekommen.
Kannst Du mir ein Beispiel Deiner Lösung geben?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von Jan »

Ingo,

das hier ist der Originalcode aus dem Bondruck. Das muß bei Dir eventuell angepasst werden, vieleicht kannst Du das auch kürzen. Ich hab halt eine Überprüfung drin, ob der korrekte Drucker überhaupt installiert ist. Wenn an den betreffenden Rechnern der benötigte Drucker als Standard-Drucker eingerichtet ist, dann kann alles in dem markierten Bereich weg. Außerdem hab ich die Schleife drin für mich in der Entwicklung, damit ich nicht immer einen Bondrucker auf eminem Rechner haben muß - der Druck geht dann in eine PDF.

Code: Alles auswählen

// Den Standarddrucker initialisieren, keine Druckerauswahl anbieten
LOCAL oDrucker := NIL
LOCAL aDrcuker := {}
LOCAL nDrucker := 0

oDrucker := XbpPrinter():new()                                                                     // Neues Druckerobjekt
*** Ingo: Ab hier Auswahl
aDrucker := oDrucker:list()                                                                        // Welche Drucker sind installiert?
IF FILE("entw.txt")
   nDrucker := AScan(aDrucker, {|x, y| "FreePDF" $ x})

 ELSE
   nDrucker := aScan(aDrucker, {|x, y| cKassenKuerzel + "-KASSE" $ Upper(x)})
   IF nDrucker == 0
      nDrucker := aScan(aDrucker, {|x, y| "-KASSE" $ Upper(x)})
   ENDIF
ENDIF
IF nDrucker == 0
   MsgBox("Es ist kein Epson TM-U220 Bondrucker installiert", "Achtung")
   RETURN NIL

 ELSE
   oDrucker:create(aDrucker[nDrucker])                                                             // Den Druck auf den Epson TM-U220 schicken
ENDIF
*** Ingo: Ende Auswahl. Wenn Du das in der Markierung weg läßt mußt Du diese Zeile noch haben: oDrucker:create() 

Set Device TO printer
Set Printer On
Set Printer TO Object oDrucker
Danach kannst Du Deine gewohnte Druckroutine mit ? und ?? laufen lassen, die Formatierungen mit den ESC-Codes, usw.

Und nach dem Ausdruck alles wieder aufräumen:

Code: Alles auswählen

// Bildschirm und Drucker zurücksetzen
oDrucker:destroy()
Set Printer TO
Set Printer Off
Set Device TO Screen
Set Console On
Ich hoffe, Du kannst damit was anfangen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LPT unter Windows 10 Verion 1511

Beitrag von AUGE_OHR »

IngoM hat geschrieben: Das Programm ist noch reiner Clipper-Code und liegt, zusammen mit den Daten, auf einem Small Business Server 2011.
Die PCs laufen unter Windows 7 Pro 32bit.
Bei den Druckern handelt es sich um Epson-Nadeldrucker im Textmodus. Die Drucker sind mit 1-Port Printservern mit dem Netzwerk verbunden.
Auf den PCs gibt es Druckerpools mit LPTx und einem lokal definierten IP-Anschluss.
Wird jetzt, wie am Anfang beschrieben, aus dem Programm gedruckt, ist der IP-Port immer verfügbar und der Druck wird über das Netzwerk ausgeführt.
...

Code: Alles auswählen

SET PRINTER TO &drucker1
was steht den in &drucker1 ? "LPT1.prn" ?
SET PRINTER TO [<cDevice> | <cFileName> [ADDITIVE] ]

<cDevice>

<cDevice> ist der Name des Ausgabegeräts bzw. -kanals, an den die Druckausgaben gesandt werden sollen. Er kann entweder als Literal oder als Zeichenausdruck in ()-Klammern angegeben werden. Es kann ein lokales oder ein über ein Netzwerk erreichbares Gerät sein. Falls <cDevice> nicht existiert, wird eine ASCII-Datei mit diesem Namen erzeugt.

<cFilename>

<cFilename> gibt den Namen der ASCII-Datei an, in die die Druckausgabe umgeleitet wird. Der Name muß ggf. die Angaben für Laufwerk und Verzeichnis enthalten. Er kann entweder als literaler Dateiname oder als Zeichenausdruck in ()-Klammern angegeben werden. Wenn der Dateiname ohne Dateierweiterung angegeben ist, wird standardmäßig die Erweiterung ".PRN" verwendet.
ich vermute mal das du

Code: Alles auswählen

drucker1 := "LPT1" 
in deinem Code stehen hast ... das ist nicht DOS sondern Windows :badgrin:

er geht wohl von einem <cDevice>, was nicht existiert, oder <cFilename> ( wegen ".PRN" ) aus
... hm ... :-k ... ich frage mich ob da was mit der Syntax > XP war ... "LPT1:" (Doppelpunkt) :?:

---

öffne mal deine Drucker Auflistung und siehe dir die "Namen" an.
Du hast jetzt nicht mehr eine beschränkte Anzahl von Ports ( LPTx ) sondern sprichst die Geräte mit dem Namen (oder IP) an.

ich lege für jeden benötigten LPTx Port eine Kopie des Druckers an, ändere den Namen, LPTx Port usw.

unter Xbase++ erstellst du ein Printer Object mit dem Namen des Druckers, wozu du auch XbpFileDialog() nutzen kannst.
wenn du mehrer Printer Objecte gleichzeitig aktive hast kannst du mit

Code: Alles auswählen

SET PRINTER TO OBJECT <oXbpPrinter> 
wie bei LPTx "umschalten"

IngoM hat geschrieben:Jimmy, wie sieht die Syntax mit IP-Adresse aus?
siehe Bild
Dateianhänge
Printer_IP_Port.jpg
Printer_IP_Port.jpg (229.18 KiB) 21518 mal betrachtet
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo Jimmy,

Du hast richtig vermutet; in &drucker1 steht "LPT1".

Dein Vorschlag scheint sich, für mich, am einfachsten realisieren zu lassen.
Mein Programm verwendet zwei Drucker. Ich kann also beide, für LPT1 und LPT2, beim Start des Programmes anlegen und dann nach Bedarf im Programm umschalten. Am Ende des Programmes zerstöre ich dann die Druckerobjekte wieder?

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von Wolfgang Ciriack »

War da nicht mal was mit einem Punkt, damit nicht .prn angehängt wird?
Versuch doch mal als Drucker "LPT1."
Viele Grüße
Wolfgang
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo,

zu diesem Problem findet sich ein Beitrag in der c't Nr. 3 vom 23.01.2016 auf Seite 149; "Windows 10: Druckerprobleme am Parallel-Port".
Außerdem findet sich die Beschreibung eines "Workarounds" auf
http://answers.microsoft.com/en-us/wind ... 61890c24a6

Viele Grüße
Ingo
Viele Grüße
Ingo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LPT unter Windows 10 Verion 1511

Beitrag von AUGE_OHR »

Tja ... der "Parallel-Port" wurde von M$ ebenso behandelt wie die "Floppy-Disk" ... moderne Geräte haben so was nicht mehr :badgrin:
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von brandelh »

LPT1 ist eine physikalische Schnittstelle an der mit einem alten Kabel ein Drucker hängt
oder eine logische auf die ein anderer Drucker umgelenkt wird.
Die traditionelle Vorgehensweise ist die Zuordnung mit NET USE, auch wenn es ein lokaler Drucker ist.
Ein Drucker im Netzwerk wird immer zugeordnet, da seine Schnittstelle nunmal NICHT LOKAL ist.

Diese Zuordnung konnte man früher mit "NET USE" machen, oder im Druckertreiber einem LPT zuordnen.

Wie auch immer, SET PRINTER TO OBJECT wie in Jan's Beispiel sollte funktionieren, da es ja echte Zeilendrucker sind.
Gruß
Hubert
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: LPT unter Windows 10 Verion 1511

Beitrag von IngoM »

Hallo Hubert,

Danke für den Tip; diesmal habe ich den Wald vor lauter Bäumen nicht gesehen.

Durch die SMB-Probleme im Verlauf der Umstellung auf SBS 2011 wurden alle Drucker netzwerkfähig gemacht.
NET USE ist dann natürlich die eleganteste Lösung, da nichts im Programm geändert werden muss.
Ich gehe davon aus, dass das funktioniert, muss es aber bei meinem Kunden noch testen.
Viele Grüße
Ingo
saab-olly
Rookie
Rookie
Beiträge: 18
Registriert: Sa, 17. Mär 2018 18:13

Re: LPT unter Windows 10 Verion 1511

Beitrag von saab-olly »

Hallo,
ich kämpfe seit Tagen mit dem Drucken unter Win10, das unter XP beim Kunden noch problemlos lief. Zur Eingrenzung des Problems habe ich u.a. diesen Code-Teil hier verwendet, aber egal welchen meiner Drucker ich anspreche, kommt die Seite nicht raus. DIe Warteschlane füllt sich, wird abgebaut aber es kommt nichts raus. Drucke ich auf PDF oder xps sind die Dateien uvollständig und können nicht geöffnet werden.

Hat jemand eventuell dazu eine Idee? 1000 Dank im Voraus, ich verzweifele gerade :banghead:
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LPT unter Windows 10 Verion 1511

Beitrag von AUGE_OHR »

hi,

willkommen im Deutschen Xbase-Forum.

zu deiner Frage : kannst du uns mehr Informationen geben ?
am besten wäre natürlich ein Source, der sich compilieren/linken lässt, um dein Problem zu sehen.

---

was mir an dem Code Ausschnitt fehlt ist ein EJECT am Ende was die letzte Seite "auswerfen" sollte
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von Wolfgang Ciriack »

Der einfachste Weg ist im Zweifelsfall immer eine Freigabe des Druckers unter Windows als "MeinFreigabename> und ein

Code: Alles auswählen

net use LPT3: \\<PCName>\<MeinFreigabename>
und dann im Programm auf LPT3 drucken. Man kann natürlich auch andere (LPT1,2 oder so) nehmen.
Viele Grüße
Wolfgang
saab-olly
Rookie
Rookie
Beiträge: 18
Registriert: Sa, 17. Mär 2018 18:13

Re: LPT unter Windows 10 Verion 1511

Beitrag von saab-olly »

Hallo und danke für Eure schnelle Antworten!

Mit Freigabe mittels net use.... habe ich auch rumprobiert, das ist der nächste Schritt, aber das scheint zu gehen. Mein Hauptproblem ist, dass miz der (tagesaktuellen) Win10 Version nicht mehr wie fürher drucken kann. Ich nutze noch Xbase 1.9.

Hier der einfache Code:
--------

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#pragma Library( "XppUI2.lib" )

PROCEDURE Main
LOCAL oPrinter, oPS, oDC, oDlg, aSize, oFont, oFontDlg

oDC:=XbpPrinter():New()

oDC:Create() // leere Klammer ==> Standarddrucker
? odc:devname   // prüfen
wait

Set Device TO printer
Set Printer On
Set Printer TO Object oDC

? "Hallo Welt"
EJECT

odc:newpage()
oDC:destroy()

Set Printer off
Set Printer TO
Set Device TO Screen
Set Console On

return
Grüße Olly
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: LPT unter Windows 10 Verion 1511

Beitrag von brandelh »

es ist schon lange her, aber wurde SET DEVICE nicht für die Umleitung von @ SAY genutzt ?
Es sollte reichen wenn man mit set printer to ... Drucker Objekt (Syntax habe ich nicht im Kopf)
und danach set printer on und ? "sss" arbeitet.

Aber ich empfehle eher sich mal meine Druckerklasse anzusehen (basiert auf XbpPrinter() ) und voll grafisch Drucken.
Es gibt auch welche, die meine Klasse abgewandelt haben um mit Zeilen und Spaltensteuerung zu arbeiten.

Eventuell ist auch der Einsatz von L&L zu empfehlen, viele nutzen das (ich nutze meine Klasse) ...

Aus meiner Sicht ist es reine Zeitverschwendung sich mit der alten Clipper Steuerung abzumühen
und das bei jedem Windows Update aufs neue.

Ach noch was, der Name einer Variablen ist ja eigentlich völlig egal, aber
oDC steht eigentlich für Objekt des Typs Device Context bzw. wird dieser so verwendet.
Das Drucker-Objekt (von XbpPrinter():new() ) ist aber gerade kein DeviceContext Objekt, sondern enthält dieses nach Create.

das Mischen von den Befehlen ... ? für die Ansteuerung der SET PRINTER TO Umleitung, mischt man nicht mit
odc:newpage()

und das Druckerobjekt wird danach nicht mehr existieren, ich nutze das ja nicht, aber ich würde das hinter set printer to vermuten.
oDC:destroy()
Gruß
Hubert
saab-olly
Rookie
Rookie
Beiträge: 18
Registriert: Sa, 17. Mär 2018 18:13

Re: LPT unter Windows 10 Verion 1511

Beitrag von saab-olly »

Hallo Hubert, danke für Deine Hinweise. :)

Das Mischen der verschiedenen Printer-Befehle (Device, Print to...) waren verzweifelte Versuche, das Ding zum Drucken zu bringen, daher auch die unglückliche Variabenbenennung.

Über Deine Klasse habe ich auch schon nachgedacht, aber ich müsste tausende Zeilen Listendruck umstellen, dafür habe ich keine Zeit und ob der Kunde das zahlt, ist offen. Aber vermutlich geht kein Weg dran vorbei.

Trotzdem bleibt die zentrale Frage, warum der Druck nicht finalisiert wird. Es wird wie gesagt ein Druckjob erzeugt, der Spooler bekommt ein paar kB und dann bleibt es drin stecken, daher NewPage(), EJECT etc. - alles erfolglos. :angry6:
Grüße, Olly
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: LPT unter Windows 10 Verion 1511

Beitrag von AUGE_OHR »

hi olli,

Frage : was ist mit der 1709 ?

die 1511 ist ja alt und man findet Hinweise das M$ da was verbockt hat.
die Frage ist ob es auch mit der aktuellen Version 1709 ein Problem gibt ?

an deiner Xbase++ v1.9x Version liegt es auf jeden Fall nicht falls man dir das einreden will.
gruss by OHR
Jimmy
Antworten