На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Как очистить очередь печати принтера? , Как очистить очередь печати принтера?
      ExpandedWrap disabled
        uses ..., WinSpool;
         
        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;
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0142 ]   [ 16 queries used ]   [ Generated: 27.04.24, 13:58 GMT ]