Вниз
Скачать: CL | DM;

Как поставить задачу на удаленный принтер?   Найти похожие ветки 

← →
Mike Evteev   (2005-04-20 17:07) [0]

Имеется код использующий OpenPrinter, AddJob, ScheduleJob.
Все работает нормально с локальным принтером.
При попытке открыть удаленный принтер - Code 5. Access Denied.

procedure SpoolFile(const FileName, PrinterName: string);
var
Buffer: record
JobInfo: record // ADDJOB_INFO_1
Path: PChar;
JobID: DWORD;
end;
PathBuffer: array[0..255] of Char;
end;

JobInfo: PJobInfo1;
PrinterDefaults: TPrinterDefaults;

SizeNeeded: DWORD;
Handle: THandle;
PrtName: string;
begin
PrtName := PrinterName;
if PrtName = "" then
PrtName := Printer.Printers[Printer.PrinterIndex]; // Default printer name

PrinterDefaults.pDatatype := "TEXT";
PrinterDefaults.pDevMode := nil;
PrinterDefaults.DesiredAccess := PRINTER_ALL_ACCESS;

Win32Check(OpenPrinter(PChar(PrtName), Handle, @PrinterDefaults));
try

Win32Check(AddJob(Handle, 1, @Buffer, SizeOf(Buffer), SizeNeeded));

//Finding size
GetJob(Handle, Buffer.JobInfo.JobID, 1, nil, 0, @SizeNeeded);
GetMem(JobInfo, SizeNeeded);
FillMemory(JobInfo, SizeNeeded, 0);
try
Win32Check(GetJob(Handle, Buffer.JobInfo.JobID, 1, JobInfo, SizeNeeded, @SizeNeeded));
TJobInfo1(JobInfo^).pDocument := PChar(FileName);
TJobInfo1(JobInfo^).pDatatype := "TEXT";
TJobInfo1(JobInfo^).TotalPages := 1000;
TJobInfo1(JobInfo^).PagesPrinted := 0;
TJobInfo1(JobInfo^).pUserName := "Vasia Pupkin";

Win32Check(SetJob(Handle, Buffer.JobInfo.JobID, 1, JobInfo, 0));
finally
FreeMemory(JobInfo);
end;

Win32Check(CopyFile(PChar(FileName), Buffer.JobInfo.Path, True);
Win32Check(ScheduleJob(Handle, Buffer.JobInfo.JobID)
finally
Win32Check(ClosePrinter(Handle));
end;

end;

Валится на OpenPrinter.

Что делать?
Кстати эта фигня должна выполняться из сервиса. Так что примите полномочия во внимание.

Еще вопрос - можно ли как-то управлять Separator Page динамически. Мне нужно писать LPD, но поскольку печать идет из одного процесса, то не понятно как вывести имя пользователя поставившего задание.

Буду благодарен за любую информацию!


← →
Набережных С. ©   (2005-04-20 19:24) [1]

Потому, что от имени LocalSystem. В домене W2000 решается раздачей прав компьютеру. В NT можно завести специального пользователя и имперсонировать.


← →
Mike Evteev   (2005-04-21 00:25) [2]

Прога выполнялась, не сервис. Это тестовый код.
До сервиса еще не дошло пока. Решил отладиться отдельно.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
1-1117374225
Serg1981
2005-05-29 17:43
2005.06.14
Открытие сайта, ссылка на который находится в Label


1-1117290274
Genie™
2005-05-28 18:24
2005.06.14
Как бороться с таким идиотизмом???


1-1117108540
Артём К.
2005-05-26 15:55
2005.06.14
Выделение и перетаскивание мышью нескольких компонент?


14-1117026867
Korvet
2005-05-25 17:14
2005.06.14
Открытие окон в инете.


8-1109407903
StarLit
2005-02-26 11:51
2005.06.14
Есть отсканиное изображение земельного участака со




   Наверх