Я пытаюсь получить информацию от принтера при отправке PJL на принтер. Принтер поддерживает PJL и является USB-принтером. Теперь получение информации / примеров кажется проблемой, или я смотрю в неправильных местах. Я знаю, что в MSDN много информации, но я перепробовал все, что получил, от docinfo до принтеров для записи / чтения, и, похоже, ничего не работает.
Некоторые люди говорят, что вы можете использовать writeprinter и readprinter. Я пробовал это, когда я пишу принтер, принтер, кажется, "делает" что-то, но readprinter возвращает или ошибки или пропуски. Теперь я думаю, что это может быть связано с тем, что драйвер принтера «блокирует» порт, поэтому вы не можете прочитать информацию с него?
Другой вариант, который я где-то видел, это использовать writefile и readfile. Здесь вы получите часть физического порта для принтера, например '\? \ USB # VID_05CA & PID_0403 # S5208603411 # {28d78fad-5a12-11d1-ae5b-0000f803a8c2}'. Затем вы меняете порт на «ФАЙЛ». Используйте writefile и readfile с путем как физический путь сверху. Получите необходимую информацию, а затем верните порт в исходный порт. Пробовал это тоже, тоже получал ошибки.
Я просто пытаюсь сделать простой @PJL INFO PAGECOUNT (я пропустил escape-символы и т. Д., И т. Д.). Строка верна, потому что, используя строку на сетевых принтерах, она работает на 100%, и я могу получить информацию. Но локальные принтеры - это проблема.
У кого-нибудь есть этот рабочий или рабочий пример? Любая помощь будет высоко ценится.
PS: Ниже приведен 1 из 100 примеров, которые я пробовал. Это пример 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;