Einzelnen Beitrag anzeigen

Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

cab Etikettendrucker Statusabfragen über USB

  Alt 24. Sep 2015, 13:36
Hallo zusammen,

wir verwenden in unserer Firma zum Druck von Etiketten (z.B. Versandkartonetiketten) Drucker der Firma cab.
In einem neuen Projekt haben wir die Drucker über USB angeschlossen.
Der Druck funktioniert wunderbar über die folgenden Funktion:

Delphi-Quellcode:
function fnPrintviaComputerPrinter(slPrinterCommands : TStrings; sPrintername, sDocumentName : String) : Boolean;

var
  hPrinter : THandle;
  kDocInfo : TDocInfo1;
  i : Integer;
  dwWritten : DWord;
  sRec : String;
  StringList : TStrings;

begin

  //Set Result
  Result := False;

  //Try with Printer from Function Call
  If Not WinSpool.OpenPrinter(PChar(sPrintername), hPrinter, nil) Then
  Begin
    //Try with Windows Default Printer
    Printer.PrinterIndex := -1;
     If Not WinSpool.OpenPrinter(PChar(Printer.Printers[Printer.PrinterIndex]), hPrinter, nil) Then Exit;
  End;

  //Spool Output Settings
  Try
    With kDocInfo Do
    Begin
      pDocName := PChar(sDocumentName);
      pOutputFile := nil;
      pDatatype := 'RAW';
      //pDatatype := 'TEXT'; --> only for FreePDF
    End;

    //Send Printer Commands to the Printer
    If (StartDocPrinter(hPrinter,1,@kDocInfo) = 0) Then Abort;
    Try
      For i := 0 to slPrinterCommands.Count -1 do
      Begin
        sRec := slPrinterCommands.Strings[i] + #13+#10;
        Result := WritePrinter(hPrinter,PAnsiChar(AnsiString(sRec)),Length(sRec),dwWritten);
        If Not Result Then Abort;
      End;
      Result := true;
    Finally
      EndPagePrinter(hPrinter);
    End;

  Finally
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  end;

  //Set Result
  Result := True;

end;
Nachdem Druck muss jetzt aber noch der Status des Druckers abgefragt werden.
Lt. Hersteller gibt es hierfür sogenannte ESC Kommandos...
Ein ESC Kommande sollte mir in einem String den genauen Status zurückgeben...

Aber wie kann ich über den USB Port diese Daten empfangen bzw. erhalten? Ich bin hier etwas ratlos wie ich das Thema angehen soll da ich sowas noch nie gemacht habe, auch meine Suchen ham mir bisher nicht auf die Sprünge geholfen...
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat