Programmierung

Ermitteln verfügbarer Drucker & mehr

Bei Anwendungen mit Druckausgabe besteht in aller Regel die Notwendigkeit, Informationen über die installierten Drucker zu erhalten. Über das Application-Objekt (_App) ermöglicht CONZEPT 16 dem Entwickler einen Zugriff auf die eingerichteten Drucker bzw. Druckertreiber.


Das Application-Objekt stellt die verfügbaren Drucker in Form einer Liste zur Verfügung. Über die Eigenschaft ppPrinterList erhält der Entwickler den Handle auf diese Liste.

tPrtList # _App->ppPrinterList

Ausgehend von diesem Handle können mit Hilfe der Funktion PrtInfo() die einzelnen Drucker ermittelt werden. Als Resultat liefert die Funktion einen Deskriptor auf den Drucker bzw. das Drucker-Objekt.

// Verfügbare Drucker ermitteln
tPrtList # _App->ppPrinterList;
if (tPrtList > 0)
{
  for   tPrinter # tPrtList->PrtInfo(_PrtFirst)
  loop  tPrinter # tPrinter->PrtInfo(_PrtNext)
  while (tPrinter != 0)
  {
     ...
     ...
  }
}

Das Erstellen der Liste mit den installierten Druckern führt der CONZEPT 16-Client einmalig beim Anmelden an einer Datenbank durch. Um eine Liste der Treiber zu erhalten, die dem aktuellen Konfigurationsstand entspricht, kann der Eigenschaft ppPrinterList das Argument _PrtListRefresh mitgegeben werden. Bei Angabe des Arguments werden die verfügbaren Drucker erneut ermittelt und in die Liste eingelesen.

// Liste der verfügbaren Drucker aktualisieren
tPrtList # _App->ppPrinterList(_PrtListRefresh);

Zu jedem Drucker kann eine Vielzahl von Informationen eingeholt werden. Unterteilt werden diese in Eigenschaften, Attribute und Status-Informationen. Direkt abrufbar sind die Eigenschaften ppName (Name des Druckers), ppCaption (Anzeigename des Druckers) und ppComment (Kommentar).

Der Zugriff auf weitere Eigenschaften sowie Attribute und Status-Informationen, ist erst nach dem Ausführen der Funktion PrtPrinterRefresh(), möglich.

// Alle Eigenschaften übermitteln
tPrinter->PrtPrinterRefresh();

Eigenschaften

Zu den Eigenschaften zählen Angaben wie zum Beispiel Name des Druckers, verwendeter Port oder Standort des Druckers.

// Name des Druckers ermitteln
tName # tPrinter->ppName

// Port des Druckers ermitteln
tPort # tPrinter->ppNamePort

Attribute

Die Arttribute geben zum Beispiel Auskunft darüber, ob es sich um einen lokalen- Netzwerk- oder Fax-Drucker handelt. Die Attribute werden über die Eigenschaft ppAttributes des Drucker-Objekts abgefragt.

// Netzwerkdrucker
tNetwork # (tPrinter->ppAttributes & _PrtAttribNetwork > 0)

// Faxdrucker
tFax # (tPrinter->ppAttributes & _PrtAttribFax > 0)

Status-Informationen

Zu den Status-Informationen gehören Angaben über den Papier- oder Tonerstatus. Der Status wird über die Eigenschaft ppStatus des Drucker-Objekts abgefragt.

// Tonerstand ist niedrig
tToner # (tPrinter->ppStatus & _PrtStatusTonerLow > 0)

// Drucker ist angehalten
tPause # (tPrinter->ppStatus & _PrtStatusPause > 0)

Das Ermitteln der Eigenschaften ist abhängig vom jeweiligen Treiber. Sind bestimmte Informationen nicht abfragbar, kann CONZEPT 16 an dieser Stelle nichts zurückgeben.

Eine Übersicht der möglichen Eigenschaften und Status-Informationen kann in der CONZEPT 16-Dokumentation nachgelesen werden.

4 Kommentare

4 Kommentare “Ermitteln verfügbarer Drucker & mehr”

  1. Danke für die Infos – sehr schön, dass man so viele Eigenschaften auslesen kann!

    Aber es ist wahrscheinlich nicht möglich, den Drucker für andere Benutzer zu "blockieren"?

    Dann könnte man sicherstellen, dass die eigenen Druckjobs "en bloc" erscheinen und sich "niemand dazwischen mogelt".

    Ich fand diesbzgl. die Properties
    _PrtStatusBusy, _PrtStatusPrinting, _PrtStatusProcessing
    in der Hilfe.

Kommentar abgeben