Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

Druckerstatus ermitteln und anzeigen

  Alt 2. Nov 2012, 10:54
Ich versuche mich gerade daran einen eigenen Drucker Dialog zu erstellen, quasi den Dialog der erscheint beim Aufruf von PrintDialog.Execute nach zu bilden.

Das ganze findet mit Delphi 2007 unter Windows XP statt. Bisher sieht alles gut aus nur habe ich noch so meine Probleme mit dem Status des Druckers.
Ich bekomme zwar einen Status abgefragt jedoch nur als Cardinal und da frage ich mich komme ich irgendwie an die entsprechenden Texte oder muss ich die selbst machen?!

Was mich auch stutzig macht ist das diese Drucker quasi 2 Status Informationen bereithält. "Wenig Toner" und "0 Dokumente warten" zu letzterem konnte ich kein Status Flag in der WinSpool.pas finden. (Siehe Anhang)

Ich würde mich wohl schon zufrieden geben wenn ich eine offizielle Liste finden würde mit der ich den Status in deutsch umwandeln könnte.

Delphi-Quellcode:
var
    ADevice: array[0..MAX_PATH-1] of Char;
    ADriver: array[0..MAX_PATH-1] of Char;
    APort: array[0..MAX_PATH-1] of Char;
    ADeviceMode: THandle;


procedure TfrmPartsListPrintDialog.cmbPrinterSelect(Sender: TObject);
var
  hPrinter: THandle;
  BytesNeeded: DWORD;
  pInfo: PPrinterInfo2;

begin
  //Drucker auswähl ändern
  Printer.PrinterIndex := cmbPrinter.ItemIndex;

  //Neuen Drucker auswählen
  Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);

  if OpenPrinter(ADevice, hPrinter, nil) then begin
    try

      GetPrinter(hPrinter, 2, nil, 0, @BytesNeeded);

      pInfo := AllocMem(BytesNeeded);
      try
        GetPrinter(hPrinter, 2, pInfo, BytesNeeded, @BytesNeeded);

        //Hier käme sowas wie "StatusToString" hin ...
        lblType.Caption := pInfo^.pDriverName;
        lblLocation.Caption := pInfo^.pLocation;
        lblComment.Caption := pInfo^.pComment;

      finally
        FreeMem(pInfo);
      end;{try..finally}

    finally
      ClosePrinter(hPrinter);
    end;{try..finally}
  end;{if}

end;
Miniaturansicht angehängter Grafiken
druckerdialog.png  
  Mit Zitat antworten Zitat