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

Советы » Принтеры и Печать » Как прочитать очередь печати

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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com