nikolaosk
asked on
function to resume all paused print jobs + delphi
hi there!!!!!
i need a function in delphi that will resume all paused print jobs that are currently in the print job queue of the printer.
i have some code that resumes the printer but not the jobs. hope it helps. i need some urgent help.
************************** *
procedure ResumePrinter;
var
hPrinter : THandle;
PrinterName : PChar;
PrinterDefaults : TPrinterDefaultsA;
DevMode : PDeviceModeA;
Needed : integer;
handle:thandle;
begin
try
PrinterName := PChar(Printer.Printers[Pri nter.Print erIndex]);
WinSpool.OpenPrinter(Print erName,hPr inter,nil) ;
Needed := WinSpool.DocumentPropertie s(Handle,h Printer,Pr interName, DevMode^,D evMode^,0) ;
if Needed < 0 then
begin
exit;
end;
GetMem(DevMode,Needed);
WinSpool.DocumentPropertie s(Handle,h Printer,Pr interName, DevMode^,D evMode^,DM _COPY);
PrinterDefaults.pDatatype := nil;
PrinterDefaults.pDevMode := @DevMode^;
PrinterDefaults.DesiredAcc ess := PRINTER_ALL_ACCESS;
ClosePrinter(hPrinter);
if OpenPrinter(PrinterName,hP rinter,@Pr interDefau lts) then
begin
if WinSpool.SetPrinter(hPrint er,0,nil,P RINTER_CON TROL_RESUM E) then
begin
ClosePrinter(hPrinter);
end
end;
ClosePrinter(hPrinter);
FreeMem(DevMode);
except
on e: exception do HandleException(e, 'ResumePrinter2000');
end;
end;
************************** ****
thanks a lot
i need a function in delphi that will resume all paused print jobs that are currently in the print job queue of the printer.
i have some code that resumes the printer but not the jobs. hope it helps. i need some urgent help.
**************************
procedure ResumePrinter;
var
hPrinter : THandle;
PrinterName : PChar;
PrinterDefaults : TPrinterDefaultsA;
DevMode : PDeviceModeA;
Needed : integer;
handle:thandle;
begin
try
PrinterName := PChar(Printer.Printers[Pri
WinSpool.OpenPrinter(Print
Needed := WinSpool.DocumentPropertie
if Needed < 0 then
begin
exit;
end;
GetMem(DevMode,Needed);
WinSpool.DocumentPropertie
PrinterDefaults.pDatatype := nil;
PrinterDefaults.pDevMode := @DevMode^;
PrinterDefaults.DesiredAcc
ClosePrinter(hPrinter);
if OpenPrinter(PrinterName,hP
begin
if WinSpool.SetPrinter(hPrint
begin
ClosePrinter(hPrinter);
end
end;
ClosePrinter(hPrinter);
FreeMem(DevMode);
except
on e: exception do HandleException(e, 'ResumePrinter2000');
end;
end;
**************************
thanks a lot
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
atul,
hi again
i get an error code
undeclared identifier:TArrayofJobs
please advise.
thanks
hi again
i get an error code
undeclared identifier:TArrayofJobs
please advise.
thanks
If your going to use atul's code, then you will also need to add in a call to FreeMem to avoid the memory leak.
Russell
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
hi there!!!
both solutions worked.
but i did use rllibby's first.
thanks
both solutions worked.
but i did use rllibby's first.
thanks
proceure ResumeAllJobs;
var
PrinterName : string;
hPrinter : THandle;
NumJobs : cardinal;
pcbNeed,pcReturned:DWord;
i : integer;
Buffer: Pointer;
begin
PrinterName := Printer.Printers[Printer.P
OpenPrinter(PAnsiChar(Prin
NumJobs := 10;
EnumJobs(hPrinter, 0, NumJobs, 2, nil, 0, pcbNeed, pcReturned);
GetMem(Buffer, pcbNeed);
if EnumJobs(hPrinter, 0, NumJobs, 2, Buffer, pcbNeed, pcbNeed, pcReturned) then
begin
for i := 1 to pcReturned do
begin
if TArrayofJobs(buffer^)[i].S
SetJob(hPrinter, TArrayofJobs(buffer^)[i].J
end;
end;
end;