![]() |
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:
[edit=sakura] [delphi]-Tags eingefügt. Mfg, sakura[/edit]
// 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; |
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 ... |
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 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz