Announcement

Collapse
No announcement yet.

Drucken mit WritePrinter geht nicht mehr unter XP

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Drucken mit WritePrinter geht nicht mehr unter XP

    Hallo,

    ich steuere eine Ladenkasse über einen speziellen Ausgang eines PosPrinters an und muß dazu eine ESC-Sequenz an den Drucker schicken. Dazu habe ich in der Vergangenheit die Funktion WritePrinter benutzt. Unter XP geht das jetzt nicht mehr. Ich kann sogar überhaupt nichts mehr ausdrucken. Wenn ich den Drucker anklicke kann ich in dem Fenster sehen, wie dort der Druckauftrag erscheint und nach kurzer Zeit offensichtlich fertig ist. Nur leider bewegt sich beim Drucker gar nichts. Ich habe mal ein kleines Beispielprogramm mitgeliefert:

    <PRE>
    HANDLE PrnHandle;
    DWORD size;
    char Help[1024] = {"Hallo"};

    OpenPrinter("HP Laserjet",&PrnHandle,NULL);
    if (PrnHandle != NULL)
    { DOC_INFO_1 DocInfo;
    DocInfo.pDocName = "WritePrinter-Test";
    DocInfo.pOutputFile = NULL;
    DocInfo.pDatatype = "RAW";
    if (StartDocPrinter(PrnHandle,1,(LPSTR)&DocInfo) <= 0) ErrMsg("StartDocPrinter");
    else if (StartPagePrinter(PrnHandle) <= 0) ErrMsg("StartPagePrinter");
    else if (!WritePrinter(PrnHandle,Help,strlen(Help),&size))
    ErrMsg("WritePrinter");

    if (!EndPagePrinter(PrnHandle)) ErrMsg("EndpagePrinter");
    else if(!EndDocPrinter(PrnHandle)) ErrMsg("EndDoc");
    ClosePrinter(PrnHandle);
    }
    </PRE>

    Bye - Peter

  • #2
    Ich kann noch etwas Info nachschieben:

    Der Drucker bekommt alle Befehle und druckt es auch aus, ABER:
    erst wenn ich z.B. einen neuen Druckauftrag über ein anderes Programm oder mit Printer()->BeginDoc() ... Printer()->EndDoc gestartet habe.
    Wenn ich den Code aus dem Beispiel mehrfach gestartet habe, sind die ganzen "Hallo"'s alle auf einer Seite. Windows hat das Ende des Druckauftrages offensichtlich nicht ausgeführt.

    Bye - Pete

    Comment


    • #3
      Hallo,

      ich habe den Fehler gefunden. Für alle die es interessiert:

      Außer Windows XP drucken alle anderen Windows Versionen das Dokument aus, wenn der Druck beendet wird. Windows XP tut dies nur, wenn ein FormFeed erfolgt. Fehlt dieser, so wird der Druckauftrag erst beim nächsten Druckauftrag (welcher allerdings ein FormFeed haben muß) ausgedruckt. Wenn man die Printer()-Klasse benutzt wird das bei EndDoc aber richtig gemacht und ausgedruckt. Bei Verwendung der Funktion EndDocPrinter() wird das nicht gemacht. Wenn man also, wie in meinem Fall, eine ESC-Sequenz zum Ansteuern eines Zusatzports am Drucker verwenden will, muß man ein abschließendes "\f" senden, um diese Sequenz auszuführen.

      Bye - Pete

      Comment

      Working...
      X