Как очистить очередь печати принтера?

Как очистить очередь печати принтера?

uses ..., WinSpool;
{©Drkb v.3(2007): www.drkb.ru}

procedure TForm1.Button1Click(Sender: TObject);
var
 PrintersInfo, TmpPrintersInfo: PPrinterInfo1;
 pcbNeeded, pcReturned, jpcbNeeded, jpcReturned: DWORD;
 I, J: Integer;
 hPrinter: THandle;
 JobInfo, TmpJobInfo: PJobInfo3;
begin
 EnumPrinters(PRINTER_ENUM_LOCAL, nil, 1, PrintersInfo, 0, pcbNeeded, pcReturned);
 if GetLastError = ERROR_INSUFFICIENT_BUFFER then
 begin
  GetMem(PrintersInfo, pcbNeeded);
  try
  if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 1,
  PrintersInfo, pcbNeeded, pcbNeeded, pcReturned) then
  begin
  TmpPrintersInfo := PrintersInfo;
  for I := 0 to pcReturned - 1 do
  begin
  if OpenPrinter(TmpPrintersInfo^.pName, hPrinter, nil) then
  begin
  EnumJobs(hPrinter, 0, 100, 1, nil,
  0, jpcbNeeded, jpcReturned);
  if GetLastError in [NO_ERROR, ERROR_INSUFFICIENT_BUFFER] then
  begin
  GetMem(JobInfo, jpcbNeeded);
  try
  if EnumJobs(hPrinter, 0, 100, 3, JobInfo,
  jpcbNeeded, jpcbNeeded, jpcReturned) then
  begin
  TmpJobInfo := JobInfo;
  for J := 0 to jpcReturned - 1 do
  begin
  if not SetJob(hPrinter, TmpJobInfo^.JobId, 0,
  nil, JOB_CONTROL_DELETE) then RaiseLastOSError;
  Inc(TmpJobInfo);
  end;
  end
  else
  RaiseLastOSError;
  finally
  FreeMem(JobInfo);
  end;
  end
  else
  RaiseLastOSError;
  end
  else
  RaiseLastOSError;
  Inc(TmpPrintersInfo);
  end;
  end
  else
  RaiseLastOSError;
  finally
  FreeMem(PrintersInfo);
  end;
 end
 else
  RaiseLastOSError;
end;

Взято из http://forum.sources.ru
Автор: Rouse_

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...