Druckausgabe DOS

  • Ich habe ein Programm aus GFA-Basic übernommen welches Ausdrucke an eine n seriellen Drucker sendet.....dort wird der Port ganz normal mit open geöffnet. Habe in AutoIt das Problem so gelöst das beim Programmstart mit
    runwait mode gestartet wird und den Port einstellt und später wird dann mit
    filewrite($port, $daten) auf den Port geschrieben .... funktioniert auch tadellos. Allerdings habe ich nun festgestellt das Zeichen die zum erweiterten ASCII-Zeichensatz gehören falsch dargestellt werden. Konkret geht es um das Grad-Zeichen ° und die deutschen Sonderzeichen - ansonsten geht alles perfekt. Was kann man da machen.....????

  • Hi,
    habe auch gerade keine zündende Idee. Vielleicht stellt er ja irgend ein anderes Zeichen als ° dar. Probier mal alle durch:

    [autoit]

    For $i = 0 to 255
    filewrite($port, $i & ":" & chr($i))
    Next

    [/autoit]


    eddy_erpel

    • Offizieller Beitrag

    Hallo!

    Zu deinem anderen "problem" mit dem sednen zur serielen schnittstelle.. es gibt da so eine wunderschöne dll namens inpout32.dll

    Hier ein bsp code und unten die dll!

    Spoiler anzeigen
    [autoit]

    ;InpOut32.dll erklärung:
    ;Weitere Infos: http://www.the-starbearer.de/Praxis/Program…%20inpout32.htm
    ;Erklärung: $dll = "diedll.dll", "Inp32" = Inputcheck, 0x379 = Com1(Nachzulesen im Gerätemanager unter z.b. Drucker)
    ;Aufruf: DllCall($dll,"short","Inp32",short",0x379

    [/autoit] [autoit][/autoit] [autoit]

    $oldcheck = 123
    ; DateiName Einstellungen* Schnittstelle Port
    $r = DllCall("inpout32.dll", "short", "Inp32", "short", 0x379, "short", 11)

    [/autoit] [autoit][/autoit] [autoit]

    ;*Einstellungen: Inp32 für Inputcheck, Out32 für SetOutput

    [/autoit] [autoit][/autoit] [autoit]

    If Number($r[0]) = 255 Then
    If $oldcheck <> 0 Then
    MsgBox(0, "", "Alles ok")
    $oldcheck = 0
    EndIf
    ElseIf Number($r[0]) = 127 Then
    If $oldcheck <> 1 Then
    MsgBox(0, "", "nicht alles ok..")
    $oldcheck = 1
    EndIf
    Else
    If $oldcheck <> 2 Then
    MsgBox(0, "?!", "Iregnwas is da falsch *g*")
    EndIf
    EndIf

    [/autoit]

    Mfg Spider

  • der eingebaute Zeichensatz des Druckers ist nicht der deines Windows Zeichensatzes. Vergleiche beide Zeichsätze und konvertiere die benötigten Zeichen vor dem Drucken

    Gruß Paule

  • Hallo!

    habe ähnliches Problem, die Funktion:

    [autoit]


    _FileReadToArray($newfile, $lRead )

    [/autoit][autoit][/autoit][autoit]

    steigt mir aus, wen Hex00 in der Zeile steht, bräuchte da auch noch ein paar Sonderzeichen geändert (Daten kommen von einem IBM-Host)

    [/autoit][autoit][/autoit][autoit]

    mit einem Script tausch ich das Zeichen momentan einzeln aus

    [/autoit][autoit][/autoit][autoit]

    $chars = FileRead($hfile,1)

    [/autoit][autoit][/autoit][autoit]

    if @error = -1 then ExitLoop

    [/autoit][autoit][/autoit][autoit]

    $asciiwert=asc($chars)

    [/autoit][autoit][/autoit][autoit]

    if $asciiwert=0 then
    ; msgbox(0,"bin drin","HUHU")
    $Blank=Chr(32)
    $chars=$Blank
    EndIf

    [/autoit][autoit][/autoit][autoit]

    FileWrite($afile, $chars)

    [/autoit]


    das geht doch sicher auch etwas optimierter (und wenns schneller ginge
    wär auch nicht schlecht.

    Hat jemand sowas schonmal progammiert, gibts irgendwas dazu???

    Gruss

    German

    Edit: (Mega) : Habe mal Autoit-Tags hinzugefügt, obwohl Text dazwischen ist.

  • Hi, weil ihr gerade beim Thema "drucken" seid, kennt von euch jemand eine Methode die Druckausgabe eines DOS Programms umzuleiten?
    Das Programm druckt unter Windows XP einzig und allein auf Druckern die über den Parallelport angeschlossen sind. Netzwerkdrucker oder über USB angeschlossene Geräte funktionieren nicht.
    Es müsste so was wie ein Dummy Dos Drucker sein der die Ausgabe an einen Windows Drucker weiterleitet.

    MfG
    Janos

    • Offizieller Beitrag

    Hi,

    was ist denn das für ne Technik. :rofl_devil:

    Wie wäre es, wenn du dir einen Wrapper baust für dein Programm.

    Den starten, dann startet er dein DOS Pg und interagiert damit. Wenn jetzt drucken gedrückt wird, dann speicherst du die und sendest sie mit dem Wrapper an den Drucker deiner Wahl.

    Nur ne Idee, kann sein, dass sie überhaupt nicht umsetzbar ist.

    So long,

    Mega

  • Hi,
    ich bau jetzt erstmal das Script weiter aus wir zusammen entwickelt haben ;)
    Das Druckproblem wurde mit Sicherheit schon ohne Wrapper gelöst, ich muss nur wissen von wem und wo er seine Erkenntnisse hinterlegt hat.

    MfG
    Janos

    Einmal editiert, zuletzt von janos (1. Dezember 2006 um 21:22)

  • TCP/IP Druckdienst installieren.
    Drucker ist im Netzwerk oder per USB angeschlossen.

    a, Drucker freigeben (ohne Leerstellen!!!) z.B. als HP1200

    b, net use lpt2 \\meineKiste\HP1200 /p:yes

    und schon sollte das DOS-Programm drucken können!!

    mit lpt1 solls Probleme geben können, wenn Du nicht genug Rechte hast (ich bin erst seit 2 Wochen auf XP seitdem ich ne neue Kiste habe)

    Gruss

    German

    PS: kenn die Probleme, von wegen, daß jede Firma schon alles als Windows Applikation hat!!!

  • Hallo Oliver,

    ich drucke auch noch (täglich) mit einem DOS-Programm ins Netzwerk - allerdings ist die 8-Zeichen-Grenze zu beachten (z.B.//Server/drucker).


    Und falls Du in eine Datei/Verzeichnis drucken kannst, gibt es auch die Möglichkeit per Windows-Programm das Verzeichnis zu überwachen und die Datei dann auf einen Windows oder Netzwerkdrucker umzuleiten.

    Ich hatte mal das Problem von DOS auf einen USB-Printer drucken zu müssen. Ich bin mir jetzt nicht mehr sicher ob es das hier war, bei Bedarf suche ich aber nochmals die damalige Lösung raus.

    Spoiler anzeigen

    prfile21.zip Send n-up text,
    PostScript & more to printer

    PrintFile is a Windows utility program
    that does n-up printing (with optional
    pretty printing) of text files
    e.g. source code files. It can also
    send files directly to a printer. This
    can be seen as a Windows replacement for
    the DOS command "copy/b file LPT1". As
    opposed to this DOS command, PrintFile
    works well with network printers which
    has no connection to any LPTx. This
    function is mainly intended for printing
    PostScript files but may just as well be
    used for any file created by a by the
    "Print to File" option available for
    most Windows printer drivers. The
    program also has several PostScript
    specific options (e.g. n-up).

    Both 16 bit (Win 3.1x) and 32 bit (Win
    95 and NT) versions included. Freeware.

    Peter Lerup
    ptlerup@hem1.passagen.se
    http://hem1.passagen.se/ptlerup/


    Viele Grüße
    Carsten

  • Hi, die Standard Sachen habe ich alle überprüft, mir sind die Limitierungen von Dos noch geläufig.
    Z.B. hat das Programm unter Windows 98 noch auf einen HP Laserfax XY gedruckt, nach dem Upgrade auf Windows XP konnte es den Drucken nicht mehr ansprechen.
    Das auch manche Parallelport Drucker nicht funktionieren deutet für mich darauf hin, dass es etwas dem Druckertreiber zu tun hat.
    So in der Art wie beim drucken über einen Terminalserver, das funktioniert auch nur mit bestimmten Modellen, vorausgesetzt man benutzt keinen Universal Druckertreiber wie z.B Thinprint.


    Carsten, Danke, ich schau es mir an ...


    MfG
    janos