Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Anzahl gedruckter Seiten lässt sich nicht ermitteln (https://www.delphipraxis.net/57135-anzahl-gedruckter-seiten-laesst-sich-nicht-ermitteln.html)

neuronet 16. Nov 2005 11:49


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:
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;
Nun kommt es aber ab und an vor, dass ich folgende Ergebnisse bekomme:

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.

neuronet 17. Nov 2005 10:30

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:

marabu 17. Nov 2005 12:08

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

neuronet 17. Nov 2005 12:53

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 mabuse.de gestolpert.

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