AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Anzahl gedruckter Seiten lässt sich nicht ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl gedruckter Seiten lässt sich nicht ermitteln

Ein Thema von neuronet · begonnen am 16. Nov 2005 · letzter Beitrag vom 17. Nov 2005
Antwort Antwort
Benutzerbild von neuronet
neuronet

Registriert seit: 16. Aug 2005
Ort: Berlin
104 Beiträge
 
Delphi 2010 Architect
 
#1

Anzahl gedruckter Seiten lässt sich nicht ermitteln

  Alt 16. Nov 2005, 12:49
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.
Andreas
--- Der Wert der Leistung liegt im Geleisteten --- Albert Einstein

Mein erstes Baby: Apple I - Der Rechner ist genauso alt wie ich... Und steht noch immer im Keller...
  Mit Zitat antworten Zitat
Benutzerbild von neuronet
neuronet

Registriert seit: 16. Aug 2005
Ort: Berlin
104 Beiträge
 
Delphi 2010 Architect
 
#2

Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln

  Alt 17. Nov 2005, 11:30
Hat hier keiner nicht auch nur den kleinsten Lösungsansatz????

Bin schon beim dritten Besen angekommen...
Andreas
--- Der Wert der Leistung liegt im Geleisteten --- Albert Einstein

Mein erstes Baby: Apple I - Der Rechner ist genauso alt wie ich... Und steht noch immer im Keller...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln

  Alt 17. Nov 2005, 13:08
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
  Mit Zitat antworten Zitat
Benutzerbild von neuronet
neuronet

Registriert seit: 16. Aug 2005
Ort: Berlin
104 Beiträge
 
Delphi 2010 Architect
 
#4

Re: Anzahl gedruckter Seiten lässt sich nicht ermitteln

  Alt 17. Nov 2005, 13:53
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...
Andreas
--- Der Wert der Leistung liegt im Geleisteten --- Albert Einstein

Mein erstes Baby: Apple I - Der Rechner ist genauso alt wie ich... Und steht noch immer im Keller...
  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 20:03 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