AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Druckerstatus prüfen

Ein Thema von fredi · begonnen am 18. Dez 2003 · letzter Beitrag vom 19. Dez 2003
Antwort Antwort
fredi

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

Druckerstatus prüfen

  Alt 18. Dez 2003, 15: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
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: Druckerstatus prüfen

  Alt 18. Dez 2003, 22:42
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 ...
  Mit Zitat antworten Zitat
fredi

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

Re: Druckerstatus prüfen

  Alt 19. Dez 2003, 08:35
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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