Конференция "WinAPI" » Отмена печати, в случае ошибки принтера
 
  • jvtheghost (20.10.15 11:20) [0]
    Добрый день. Подскажите, столкнулся с такой проблемой, программно из выборки отправляю печать на 2 принтера. 1 - конверт с адресом, 2 - письмо.
    Выборка выдает не менее 1000 лиц. Каждая запись (конверт  + письмо) отправляю на печать отдельно через цикл. Печать идет через FastReport 5.1.5 + Delphi XE7.
      В данный момент по руками 2 тестовых принтера CANON6020 и CANON6030. Какие будут в дальнейшем, не знаю.
    Данные пробовал вывести таким образом:
    function GetCurrentPrinterInformation: TPrinterInfo;
    var
     hPrinter  : THandle;
     pInfo:  PPrinterInfo2;
     bytesNeeded: DWORD;
    begin
     hprinter := GetCurrentPrinterHandle;
     try
       Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
       pInfo := AllocMem( bytesNeeded );
       try
         Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded );
          Result.SeverName          := pInfo^.pServerName;
          Result.PrinterName        := pInfo^.pPrinterName;
          Result.ShareName          := pInfo^.pShareName;
          Result.PortName           := pInfo^.pPortName;
          Result.DriverName         := pInfo^.pDriverName;
          Result.Comment            := pInfo^.pComment;
          Result.Location           := pInfo^.pLocation;
          Result.SepFile            := pInfo^.pSepFile;
          Result.PrintProcessor     := pInfo^.pPrintProcessor;
          Result.DataType           := pInfo^.pDatatype;
          Result.Parameters         := pInfo^.pParameters;
          Result.SecurityDescriptor := pInfo^.pSecurityDescriptor;
          Result.Attributes         := pInfo^.Attributes;
          Result.DefaultPriority    := pInfo^.DefaultPriority;
          Result.StartTime          := pInfo^.StartTime;
          Result.UntilTime          := pInfo^.UntilTime;
          Result.Status             := pInfo^.Status;
          Result.Jobs               := pInfo^.cJobs;
          Result.AveragePPM         := pInfo^.AveragePPM;
       finally
         FreeMem( pInfo );
       end;
     finally
       ClosePrinter( hPrinter );
     end;
    end;


    Экспериментируя с печатью пришел к выводу что STATUS = 0 всегда что не приятно. Но меняется JOBS.
    Но затем вылезла вторая проблема, принтер 6020 печатает как положено из общей очереди на печать, и я могу увидеть есть накопление JOBS или нет. Но второй принтер 6030 из общей очереди забирает в свою и в случае отсутствия бумаги у меня всегда в основной очереди JOBS=0. Каким образом можно отловить ошибку принтера, что он не напечатал ?
 
Конференция "WinAPI" » Отмена печати, в случае ошибки принтера
Есть новые Нет новых   [134427   +35][b:0][p:0.002]