Thema: Delphi Druckerstatus prüfen

Einzelnen Beitrag anzeigen

fredi

Registriert seit: 6. Aug 2003
43 Beiträge
 
Delphi 5 Professional
 
#1

Druckerstatus prüfen

  Alt 18. Dez 2003, 16:43
Hallo an alle
ich habe da eine wichtige frage.
Wenn ich in einer Schleife aus einem Verzeichnis heraus documente drucke prüfe ich zur sicherheit den Druckerstatus ab um den spooler nicht zu schnell voll zu füllen. An sich möchte ich immer erst das neue dokument drucken wenn das andere fertig ist.
Zu diesem zweck prüfe ich mit "GetNPrinterJobs" die anzahl der dokumente im druckspooler und wenn dieser leer ist druck eich das nächste. Das funktioniert anfänglich ganz gut, doch nach ca. 10-20 drucken kommt es zu eienr Fehlermeldung die filgend lautet.
"Win32-Fehler, Code: 122, Der an einen Systemaufruf übergebene datenbereich ist zu klein !"

Kann mir jemad sagen was ich machen kann, daß dieser feheler nicht mehr auftritt?

danke für eure Hilfe
fredi

Delphi-Quellcode:
// mainunit
if GetNPrinterJobs= 0 then
   ShellExecute(Handle, 'printto', PChar(documentname), PChar(S), nil, SW_HIDE); end;

// diese functionen stehen in der fncunit
function GetNPrinterJobs : Integer;
type
TJobs = array [0..1000] of JOB_INFO_1;
PJobs = ^TJobs;
var
hPrinter: THandle;
bytesNeeded, numJobs, i: Cardinal;
pJ: PJobs;
begin
Result := 0;
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;

  Result := numJobs;
  finally
  ClosePrinter(hPrinter);
  end;
  Freemem(Pj);
end;


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;
[edit=sakura] [delphi]-Tags eingefügt. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat