Вниз
Скачать: 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.026 c
1-1116884434
Masta Hookah
2005-05-24 01:40
2005.06.14
Font Skin


14-1116644228
boriskb
2005-05-21 06:57
2005.06.14
Почуствуй себя богатым :)


1-1117230205
Аск1
2005-05-28 01:43
2005.06.14
Нет ли DBX SDK for Outlook Express но на Дельфи ?


11-1099069112
Gandalf
2004-10-29 20:58
2005.06.14
KOL FTP


1-1117073077
jcrush
2005-05-26 06:04
2005.06.14
Шифрование по паролю, косяк с пробелами




   Наверх