Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007
uses 
  Winspool, Printers; 
 
function GetCurrentPrinterHandle: THandle; 
var 
  Device, Driver, Port: array[0..255] of Char; 
  hDeviceMode: THandle; 
begin 
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode); 
  if not OpenPrinter(@Device, Result, nil) then 
    RaiseLastWin32Error; 
end; 
 
function SavePChar(p: PChar): PChar; 
const 
  error: PChar = 'Nil'; 
begin 
  if not Assigned(p) then 
    Result := error 
  else 
    Result := p; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
type 
  TJobs  = array [0..1000] of JOB_INFO_1; 
  PJobs = ^TJobs; 
var 
  hPrinter: THandle; 
  bytesNeeded, numJobs, i: Cardinal; 
  pJ: PJobs; 
begin 
  hPrinter := GetCurrentPrinterHandle; 
  try 
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, 
      numJobs); 
    pJ := AllocMem(bytesNeeded); 
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, 
      bytesNeeded, numJobs) then 
      RaiseLastWin32Error; 
 
    memo1.Clear; 
    if numJobs = 0 then 
      memo1.Lines.Add('No jobs in queue') 
    else 
      for i := 0 to Pred(numJobs) do 
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s', 
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument), 
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)])); 
  finally 
    ClosePrinter(hPrinter); 
  end; 
end; 

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php