![]() |
Anzahl gedruckter Seiten lässt sich nicht ermitteln
Hi!
Habe folgendes Problem: Bei uns im Netzwerk soll festgehalten werden, welcher Arbeitsplatz mit welchem User wie viele Seiten ausgedruckt hat. Funktioniert mit dem folgenden Code im Prinzip ja auch ganz gut:
Delphi-Quellcode:
Nun kommt es aber ab und an vor, dass ich folgende Ergebnisse bekomme:
procedure TForm3.FormShow(Sender: TObject);
type TJobs = array[0..1000] of JOB_INFO_1; PJobs = ^TJobs; var hPrinter: THandle; bytesNeeded, numJobs, i: Cardinal; pJ: PJobs; begin hPrinter := GetCurrentPrinterHandle; // eigene Funktion 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; SG.RowCount:=numJobs+1; if numJobs = 0 then // else for i := 0 to Pred(numJobs) do begin if ((pJ^[i].Status=16) or (pJ^[i].Status=128)) then begin SG.Cells[0,i+1]:=inttostr(pJ^[i].JobId); SG.Cells[1,i+1]:=pJ^[i].pMachineName; SG.Cells[2,i+1]:=pJ^[i].pUserName; SG.Cells[3,i+1]:=inttostr(pJ^[i].TotalPages); SG.Cells[4,i+1]:=pJ^[i].pDocument; end; end; finally ClosePrinter(hPrinter); end; end; pJ^[i].pDocument = 'druckerdatendatei von remotesystem' pJ^[i].TotalPages = 0 obwohl ich haargenau weiss, dass ein Dokument mit z.B. 5 Seiten gedruckt wurde. Auch in der Druckerwarteschlange wird das gleiche Angezeigt (0 Seiten). Wie bekommt ich nun heraus, wie viele Seiten letztendlich gedruckt wurden??? Danke schon mal im Voraus. |
Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln
Hat hier keiner nicht auch nur den kleinsten Lösungsansatz????
Bin schon beim dritten Besen angekommen... :cry: :cry: :cry: |
Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln
Hallo Andreas.
Bei mir wird das Accounting im Netzwerk-Drucker erledigt - und den kann ich dann per SNMP o.ä. befragen. Dein Ansatz liest sich so, als ob du gar keinen Netzwerk-Drucker hast, sondern einen freigegebenen Arbeitsplatz-Drucker verwendest. Bevor du eine Software-Lösung zusammen stöpselst, die vom Ansatz her schon unzuverlässig ist, solltest du überlegen, ob es nicht viel günstiger ist einen vernünftigen Drucker zu kaufen. Dein Programm müsste als Dienst auf dem Arbeitsplatz-Rechner laufen, der die Drucker-Freigabe macht. Willst du dann periodisch beim Spooler anfragen, was so in seiner Warteschlange steht? Grüße vom marabu |
Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln
Die bisherige Lösung fragt den Spooler auf dem Server (an diesem hängen die Drucker dran) periodisch ab (200 ms), setzt diese bei Eingang auf Pause und gibt eine Rückfrage an den Clienten aus, ob dieser auch die angegebene Anzahl von Seiten drucken möchte.
Bei den meisten Dokumenten funzt das ja auch ordentlich, bis auf ein paar Ausnahmen. Welche Drucker jeweils verwendet werden, liegt nicht in meinem Ermessen, da es sich bei der Software um eine Lösung für Internet-Cafés handelt, und ich den Kunden ja nicht vorschreiben kann, sich einen bestimmten Druckertypen zu kaufen. Bin jetzt aber über eine Virutal Printer Lösung auf ![]() Damit müsste dann auf den Clients nur noch dieser eine Druckertreiber installiert werden und die Druckdaten würden dann über meine Software an den Server geschickt werden, der diese dann an den entsprechenden Drucker weiterleitet. Ob das dann letztendlich alles so funzt weiss ich noch nicht... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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-2025 by Thomas Breitkreuz