Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Anzahl der Drucke eines Druckers abfragen (https://www.delphipraxis.net/178562-anzahl-der-drucke-eines-druckers-abfragen.html)

Frage95 15. Jan 2014 07:24

Anzahl der Drucke eines Druckers abfragen
 
Hallo,

ich möchte ein Tool schreiben, mit dem ich die Anzahl der Ausdrucke eines Druckers abfragen kann. Das hat den zweck dass man weiß, wann eine Trommeleinheit ausgetauscht werden muss.
Diese Drucker global verteil also in ganz Deutschland.

Nur leider weiß ich nicht wie ich die Drucker ansprechen kann.

:?::?::?:

RWarnecke 15. Jan 2014 07:35

AW: Anzahl der Drucke eines Druckers abfragen
 
Hallo, vielleicht ist ja diese Komponente von mir etwas für Dich.

jaenicke 15. Jan 2014 07:47

AW: Anzahl der Drucke eines Druckers abfragen
 
Ich würde mich wundern, wenn diese Komponente das allgemein könnte.
Wir mussten dafür über die druckerspezifische API des Druckerherstellers gehen.

Frage95 15. Jan 2014 07:59

AW: Anzahl der Drucke eines Druckers abfragen
 
geht das denn nicht über die IP oder so ?

ich bin ein anfänger in Delphi nicht wundern :D

Union 15. Jan 2014 08:11

AW: Anzahl der Drucke eines Druckers abfragen
 
Es geht über SNMP. Die MIB sind aber oft druckerspezifisch. Oft erfolgt auch die Rückgabe der Tonerstände in 25%-Schritten und ist damit nicht vernünftig zu verwenden. Hier mal ein Ansatz, die MIBs sind in der Funktion InitMibValues einfach anpassbar bzw. erweiterbar:

Delphi-Quellcode:
uses IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdSNMP;

{$R *.dfm}

procedure TForm1.btnQueryClick(Sender: TObject);
var
  Snmp: TIdSNMP;
  MibIndex: Integer;
  MibValues : TStringList;
  MibLabel : string;
  ValIndex : Integer;
begin
   Snmp := TIdSNMP.Create(nil);
   MibValues := TStringList.Create;
   try
     Snmp.Query.Host := edtIp.Text;
     Snmp.Query.Community := 'public';
     Snmp.Query.PDUType := PDUGetRequest;
     InitMibValues(MibValues);
     for MibIndex := 0 to MibValues.Count -1 do
     begin
        Snmp.Query.MIBOID.Clear;
        MibLabel := MibValues.Names[MibIndex];
        Snmp.Query.MIBAdd(MibValues.ValueFromIndex[MibIndex], '');

        if Snmp.SendQuery then
        begin
          for ValIndex := 0 to Snmp.Reply.ValueCount - 1 do
            MemoResult.Lines.Add(Format('%-20s: %s', [MibLabel, Snmp.Reply.Value[0]]));
        end;
     end;
   finally
     MibValues.Free;
     Snmp.Free;
   end;
end;

procedure TForm1.InitMibValues(AList: TStrings);
const
   PrintPrefix = '1.3.6.1.2.1.';
var
   i : integer;
begin
   AList.Values['Geräteinformation'] := '1.1.0';
   AList.Values['Gesamtseiten']     := '43.10.2.1.4.1.1';
   AList.Values['Tonerstand 1']     := '43.11.1.1.9.1.1';
   AList.Values['Tonerstand 2']     := '43.11.1.1.9.1.2';
   AList.Values['Tonerstand 3']     := '43.11.1.1.9.1.3';
   AList.Values['Tonerstand 4']     := '43.11.1.1.9.1.4';
   for i := 0 to AList.Count-1 do
   begin
      AList.ValueFromIndex[i] := PrintPrefix + AList.ValueFromIndex[i];
   end;
end;

Frage95 15. Jan 2014 08:23

AW: Anzahl der Drucke eines Druckers abfragen
 
Okay versuche gerade deinen quellcode zu benutzen aber ich habe noch ein kleines problem und zwar zeigt er mir an, dass InitMibValues ein undeklarierter Bezeichner ist
wo liegt den mein Fehler?

Union 15. Jan 2014 08:26

AW: Anzahl der Drucke eines Druckers abfragen
 
Ich habe das als Methode des Formularobjekts deklariert. Entweder Du machst das auch, oder Du machst eine normale Funktion draus und verlagerst sie vor den Aufrufer.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    btnQuery: TButton;
    edtIP: TEdit;
    Label1: TLabel;
    memoResult: TMemo;
    procedure btnQueryClick(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure InitMibValues(AList : TStrings); // <<<<<<<<<<<< hier deklarieren
  public
    { Public-Deklarationen }
  end;

Frage95 15. Jan 2014 08:34

AW: Anzahl der Drucke eines Druckers abfragen
 
okay danke jz habe ich keine Fehler mehr auf dem Bildschirm.

Jetzt bleibt nur noch die Frage wie ich das Tool benutze ich habe oben im Edit Feld die Ip des Druckers eingegeben doch da passiert nichts ?

Tut mir leid es ist früh am Morgen ich steh ein bisschen auf dem Schlauch zudem bin ich ein anfänger in Delphi :stupid:

TiGü 15. Jan 2014 08:40

AW: Anzahl der Drucke eines Druckers abfragen
 
Zitat:

Zitat von Frage95 (Beitrag 1243710)
Tut mir leid es ist früh am Morgen ich steh ein bisschen auf dem Schlauch zudem bin ich ein anfänger in Delphi :stupid:

Die Aufgabenstellung ist vielleicht noch ein bis zwei Stufen zu hoch?
Schau mal hier: http://www.delphi-treff.de/downloads/e-book/
Insbesondere Kapitel 5!

Frage95 15. Jan 2014 08:51

AW: Anzahl der Drucke eines Druckers abfragen
 
hnm.... und wie bringe ich es jz zum laufen ?

Union 15. Jan 2014 08:53

AW: Anzahl der Drucke eines Druckers abfragen
 
Welchen Druckertyp hast Du? Und läuft das SNMP.SendQuery ohne Fehler durch?

Frage95 15. Jan 2014 08:56

AW: Anzahl der Drucke eines Druckers abfragen
 
utax clp 3626 ja es läuft ohne fehler durch nur am ende kommt kein resultat heraus

Union 15. Jan 2014 09:10

AW: Anzahl der Drucke eines Druckers abfragen
 
Eigentlich sollten die Werte auch für TA / Utax stimmen. Ansonsten kontaktierst Du den Support von denen. SMNP muß beim Drucker eingeschaltet sein.

baumina 15. Jan 2014 09:18

AW: Anzahl der Drucke eines Druckers abfragen
 
Aber so einfache Dinge wie OnClick des Buttons im Objectinspektor zugewiesen hast du schon gemacht?

Frage95 15. Jan 2014 09:23

AW: Anzahl der Drucke eines Druckers abfragen
 
ja natürlich soviel weis ich auch :D

baumina 15. Jan 2014 09:25

AW: Anzahl der Drucke eines Druckers abfragen
 
Entschuldige. Ist bei dir Snmp.Reply.ValueCount = 0?

Frage95 15. Jan 2014 09:30

AW: Anzahl der Drucke eines Druckers abfragen
 
Delphi-Quellcode:
for ValIndex := 0 to Snmp.Reply.ValueCount - 1 do
            MemoResult.Lines.Add(Format('%-20s: %s', [MibLabel, Snmp.Reply.Value[0]]));
        end;
ja

Union 15. Jan 2014 09:35

AW: Anzahl der Drucke eines Druckers abfragen
 
In diesem Fall sind die OID falsch bzw. ist SNMP auf dem Gerät deaktiviert. Wenigstens das Geräteinfo sollte nämlich sonst immer kommen:
Code:
Geräteinformation  : Brother NC-6700h, Firmware Ver.1.02  (11.05.12),MID 8CE-217,FID 2
Gesamtseiten       : 558
Tonerstand 1        : -3
Tonerstand 2        : -3
Tonerstand 3        : -3
Tonerstand 4        : -3

Frage95 15. Jan 2014 09:39

AW: Anzahl der Drucke eines Druckers abfragen
 
Hmn ich habe schon gegoogelt ob es einstellungen für den Drucker gibt die SNMP bestreffen aber nichts gefunden also gehe ich davon aus das es Standardmäßig aktiv ist.

Ich habe auch meinen Computer überprüft dort scheint alles in ordnung zu sein von den Einstellungen usw.. hmn

Union 15. Jan 2014 09:40

AW: Anzahl der Drucke eines Druckers abfragen
 
Kannst Du über das Webinterface auf den Drucker zugreifen? Und hast Du schon mit einigen der frei verfügbaren SMNP Tools geprüft ob die was liefern?

Frage95 15. Jan 2014 09:40

AW: Anzahl der Drucke eines Druckers abfragen
 
aber wenn wir schon dabei sind habe ich mal eine Verständnisfrage:

Delphi-Quellcode:
AList.Values['Geräteinformation'] := '1.1.0';
   AList.Values['Gesamtseiten'] := '43.10.2.1.4.1.1';
   AList.Values['Tonerstand 1'] := '43.11.1.1.9.1.1';
   AList.Values['Tonerstand 2'] := '43.11.1.1.9.1.2';
   AList.Values['Tonerstand 3'] := '43.11.1.1.9.1.3';
   AList.Values['Tonerstand 4'] := '43.11.1.1.9.1.4';
wie kommst du auf diese Zahlen ? :cyclops:

Union 15. Jan 2014 09:47

AW: Anzahl der Drucke eines Druckers abfragen
 
Durch Suche im Internet.

Frage95 15. Jan 2014 09:50

AW: Anzahl der Drucke eines Druckers abfragen
 
okay danke :)

und wie komme ich auf das webinterface meines druckers?:stupid::stupid:

DeddyH 15. Jan 2014 09:52

AW: Anzahl der Drucke eines Druckers abfragen
 
Im Browser die IP des Druckers aufrufen.

Frage95 15. Jan 2014 10:09

AW: Anzahl der Drucke eines Druckers abfragen
 
hmn das habe ich jz schon öfters probiert klappt aber nicht, deshalb auch die frage

Sir Rufo 15. Jan 2014 10:10

AW: Anzahl der Drucke eines Druckers abfragen
 
Zitat:

Zitat von Frage95 (Beitrag 1243745)
hmn das habe ich jz schon öfters probiert klappt aber nicht, deshalb auch die frage

Ich habe mal gehört, dass es da so etwas gibt, dass sich "Dokumentation" oder manchmal auch "Handbuch" nennt.

Das scheinen aber nur Gerüchte zu sein :roll:

DeddyH 15. Jan 2014 10:11

AW: Anzahl der Drucke eines Druckers abfragen
 
Hat der Drucker überhaupt ein Webinterface? Union scheint sich da zwar sicher zu sein, aber ich würde einfach mal einen Blick ins Handbuch werfen, vielleicht erledigen sich die anderen Probleme (z.B. Aktivieren von SNMP) damit auch von selbst.

Frage95 15. Jan 2014 10:19

AW: Anzahl der Drucke eines Druckers abfragen
 
Liste der Anhänge anzeigen (Anzahl: 1)
okay ich werde das jz mit einem anderen drucker versuchen um dessen ip heraus zu bekommen ich habe dafür eine funktion

Delphi-Quellcode:
function GetLocalIPs(const Lines:TStrings):Boolean;
type
  PPInAddr= ^PInAddr;
var
  wsaData: TWSAData;
  HostInfo: PHostEnt;
  HostName: Array[0..255] of Char;
  Addr: PPInAddr;
begin
  Result:=False;
  Lines.Clear;
  if WSAStartup($0102, wsaData)=0 then
  try
    if gethostname(HostName, SizeOf(HostName)) = 0 then Begin
       HostInfo:= gethostbyname(HostName);
       if HostInfo<>nil then Begin
          Addr:=Pointer(HostInfo^.h_addr_list);
          if (Addr<>nil) AND (Addr^<>nil) then
             Repeat
                    Lines.Add(StrPas(inet_ntoa(Addr^^)));
                    inc(Addr);
             Until Addr^=nil;
       end;
    end;
    Result:=True;
  finally
    WSACleanup;
  end;
end;
doch wenn ich den code ausführen will erhalte ich diese Fehlermeldungen (Bild im Anhang)

baumina 15. Jan 2014 10:28

AW: Anzahl der Drucke eines Druckers abfragen
 
Ändere
Delphi-Quellcode:
HostName: Array[0..255] of Char;
in
Delphi-Quellcode:
HostName: Array[0..255] of AnsiChar;
ab.

EDIT : Diese Funktion liefert dir allerdings meiner Meinung nach die IP-Adresse deines Rechners.

Frage95 15. Jan 2014 10:39

AW: Anzahl der Drucke eines Druckers abfragen
 
gut danke habe das problem jetzt gefunden ist leicht peinlich der drucker war nicht am netzwerk angeschlossen :D sorry und danke für eure hilfe

DeddyH 15. Jan 2014 10:40

AW: Anzahl der Drucke eines Druckers abfragen
 
Richtig.
Zitat:

The gethostname function retrieves the standard host name for the local computer.

Union 15. Jan 2014 10:41

AW: Anzahl der Drucke eines Druckers abfragen
 
Der war gut. Geht es denn jetzt?

Frage95 15. Jan 2014 11:40

AW: Anzahl der Drucke eines Druckers abfragen
 
ja danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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