Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Druckerstatus prüfen (https://www.delphipraxis.net/13447-druckerstatus-pruefen.html)

fredi 18. Dez 2003 15:43


Druckerstatus prüfen
 
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]

trifid 18. Dez 2003 22:42

Re: Druckerstatus prüfen
 
Hallo,

brauchst Du wirklich 1000 Druck-Jobs ?
ich würde diese Zahl auf 10-50 erstmal testen

wie bzw. mit was druckst Du Deine Daten aus ?
über das Printer-Objekt oder über einen Reportgenerator oder über das
ShellExecute(Handle, 'printto', PChar(documentname), PChar(S), nil, SW_HIDE) ?
wenn letzteres wie gross ist "S" und probiers mal mit TPrinter und writeln ...

fredi 19. Dez 2003 08:35

Re: Druckerstatus prüfen
 
danke für die rasch antwort,

Ich brauch tatsächlich 1000de druck-jobs und ich drucke mit ShellExecute.
->ShellExecute(Handle, 'printto', PChar(documentname), PChar(S), nil, SW_HIDE);

werde S mal prüfen, danke für den hinweis.

fredi.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz