Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизКак поставить задачу на удаленный принтер? Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c