Das Programm könnte die
Anzahl der Aufträge im Spooler abfragen.
In meiner Software verhindere ich so, dass hunderte Druckjobs im Spooler hängen weil der Drucker nicht bereit ist.
Wenn mehr als 3 Jobs (einstellbar) im Spooler sind, geht ein Fenster auf und der Benutzer kann entscheiden, ob er trotzdem weiterdrucken oder warten möchte bis das Limit unterschritten wurde.
Delphi-Quellcode:
function PrinterJobsCount(
const PrinterName :
String) : Integer;
var
hPrinter : THandle;
PPI2 : PPrinterInfo2;
dwNeeded : DWORD;
begin
Result := -1;
// open the printer
if NOT OpenPrinter(PChar(PrinterName), hPrinter,
Nil)
then
raise EPrinter.Create('
Can''
t open printer '+PrinterName+
#13+SysErrorMessage(GetLastError));
try
// just get the amount of needed memory
GetPrinter(hPrinter, 2,
Nil, 0, @dwNeeded);
// allocate the memory
GetMem(PPI2, dwNeeded);
try
// get the printer information
if NOT GetPrinter(
hPrinter,
// handle to printer
2,
// information level
PPI2,
// printer information buffer
dwNeeded,
// size of buffer
@dwNeeded
// bytes received or required
)
then
raise EPrinter.Create('
Error getting information for printer: '+
PrinterName+#13+SysErrorMessage(GetLastError));
Result := PPI2^.cJobs;
finally
FreeMem(PPI2);
end;
finally
ClosePrinter(hPrinter);
end;
end;