1

PJL をプリンターに送信するときに、プリンターから情報を取得するのに苦労しています。プリンターはPJL対応のUSBプリンターです。情報/例の取得に問題があるか、間違った場所を見ているようです。MSDN には多くの情報があることは知っていますが、docinfo からプリンターの書き込み/読み取りまで、そこにあるすべてのものを試してみましたが、何も機能していないようです。

writeprinter と readprinter を使用できると言う人もいます。私はこれを試してみました.writeprinterすると、プリンターは何かを「実行」しているように見えますが、readprinterはエラーまたは空白を返します. これは、プリンタードライバーがポートを「ロック」しているためであると考えられるため、ポートから情報を読み取ることができませんか?

どこかで見た他のオプションは、writefile と readfile を使用することです。ここで、プリンターの物理ポート部分を取得します。次に、ポートを「FILE」に変更します。上記の物理パスとしてのパスで writefile と readfile を使用します。必要な情報を取得してから、ポートを元のポートに戻します。これも試してみましたが、エラーも発生しました。

シンプルな@PJL INFO PAGECOUNTを実行しようとしています(エスケープ文字などを省略しました)。ネットワークに接続されたプリンターで文字列を使用すると、100%機能し、情報を取得できるため、文字列は正しいです。しかし、ローカル プリンターには問題があります。

この作業または作業例を持っている人はいますか? どんな助けでも大歓迎です。

PS: 以下は、私が試した数百の例の 1 つです。これは writeprinter の例です:

procedure TForm1.Button5Click(Sender: TObject);
Const
    Defaults: TPrinterDefaults = (
      pDatatype : Nil;
      pDevMode  : nil;
      DesiredAccess :  PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER  ) ;
Var
  Device : array[0..255] of char;
  FPrinterHandle:THandle;
  DocInfo1: TDocInfo1;
  Buffer, Buffer2:PChar;
  Written, Len:Cardinal;
  i: Integer;
  sPath: String;
Begin

  StrCopy(Device,PChar('RICOH Aficio SP 4210N PCL 6'));
  OpenPrinter(@Device, FPrinterHandle, @Defaults);

  DocInfo1.pDocName := 'test';
  DocInfo1.pOutputFile := Nil;
  DocInfo1.pDatatype := 'RAW';

  StartDocPrinter(FPrinterHandle, 1, @DocInfo1);

  StartPagePrinter(FPrinterHandle);

  Buffer := #27+'%-12345X@PJL COMMENT'+#13+#10+'@PJL INFO PAGECOUNT'+#13+#10+#27+'%-12345X';

  WritePrinter(FPrinterHandle,@Buffer,Length(Buffer), Written);

  EndPagePrinter(FPrinterHandle);

  EndDocPrinter(FPrinterHandle);

// everithing is OK here, BUT

  ReadPrinter(FPrinterHandle, @Buffer2, Length(Buffer2), len  );

end;
4

1 に答える 1

0

http://www.undocprint.org/winspool/tips_and_tricksをチェックして、何をすべきかの説明といくつかのサンプル C コードを確認してください。

このコードを使用しても、これが機能する可能性は最小限です。プリンターから読み戻せるようにするには、ポート モニターが双方向モードをサポートしている必要がありますが、標準の USB ポート モニターはサポートしていません。

また、上記のコードでは、ReadPrinter() に渡された Buffer2 が正しくありません。バッファ領域を事前に割り当ててから、バッファへのポインタのアドレスではなく、バッファのアドレスを渡す必要があります...

var
    Buffer2 : array[0..255] of Char;
begin
...
ReadPrinter( FPrinterHandle, @Buffer2[0], Length(Buffer2), len );
end;
于 2011-03-07T03:53:37.207 に答える