Я пытаюсь получить информацию с принтера при отправке PJL на принтер. Принтер поддерживает PJL, и это USB-принтер. Теперь получение информации/примеров кажется проблемой или я ищу неправильные места. Я знаю, что в MSDN есть много информации, но я пробовал все, что у меня есть, от docinfo, чтобы писать/читать принтеры, и ничего не работает.Delphi: команды PJL для принтера и считывание ответов назад
Некоторые люди говорят, что вы можете использовать writeprinter и readprinter. Я пробовал это, когда я пишущий принтер, принтер, кажется, «что-то» делает, но readprinter возвращает или ошибки или пробелы. Теперь я думаю, что это может быть связано с тем, что драйвер печати «блокирует» порт, поэтому вы не можете читать информацию с него?
Другой вариант, который я видел где-то, - использовать файл writefile и readfile. Здесь вы получите физическую часть порта для принтера, например '\? \ USB # VID_05CA & PID_0403 # S5208603411 # {28d78fad-5a12-11d1-ae5b-0000f803a8c2}'. Затем вы измените порт на «ФАЙЛ». Используйте файл writefile и readfile с указанием пути как физического пути сверху. Получите необходимую информацию, а затем установите порт обратно в исходный порт. Пробовал это также, также получая ошибки.
Я просто пытаюсь сделать простую @PJL INFO PAGECOUNT (я упустил символы выхода и т. Д. И т. Д.). Строка верна, потому что, используя строку на сетевых принтерах, она работает на 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+'%[email protected] 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;
Какая версия Delphi? Мы говорим о unicode или ansi PChar здесь? –
Его Delphi 2007 32bit и его ansi pchar или должны быть. Это всего лишь один пример кода, у меня также много других, где некоторые из них указаны с помощью PAnsiChar. – Paul