AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Drucker auslesen (Systemsteuerung --> Drucker & Faxgeräte)
Thema durchsuchen
Ansicht
Themen-Optionen

Drucker auslesen (Systemsteuerung --> Drucker & Faxgeräte)

Ein Thema von Andidreas · begonnen am 25. Jan 2008 · letzter Beitrag vom 27. Jul 2010
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Drucker auslesen (Systemsteuerung --> Drucker & Faxge

  Alt 25. Jan 2008, 10:57
aloha zusammen,


kann man mit delphi die drucker auslesen die man sich unter "Systemsteuerung --> Drucker und Faxgeräte" hinzugefügt hat irgendwie in eine listbox oder ähnliches auslesen?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 25. Jan 2008, 11:13
Listbox1.items.Assign(Printer.Printers); Weitere Infos zum einzelnen Drucker gibt es hier:
http://www.delphipraxis.net/internal...ct.php?t=64627
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 25. Jan 2008, 12:47
ah cool, dankeschön...

werd ich mal ausprobieren
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Micha-Z

Registriert seit: 24. Nov 2009
5 Beiträge
 
#4

Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 24. Nov 2009, 10:48
Hallo Delphi-Praxis-Gemeinde,

bin gerade dabei mit Delphi zu experimentieren und bräuchte etwas Hilfe.
Ich würde gern die installierten Drucker ( z.B. auf einen Server ) in
mein kleines Programm einlesen. Nun hatte ich diesen Fred hier gelesen
und komme damit aber nicht wirklich weiter. Eigentlich bräuchte ich nur
den Namen und die dazugehörige IP. Und diese Daten dann in einem Arry.

Listbox1.items.Assign(Printer.Printers); ist da ja zu wenig. Und der
andere Link hier ist wieder etwas zu umfangreich.

..... HILfe

GRuß
Micha
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 24. Nov 2009, 11:11
Hallo Micha,

schaue Dir mal meine Komponente TPrinterInfo an. Damit kannst Du fast alles auslesen, was in dem Fenster Drucker & Faxgeräte angezeigt wird.
Sollte etwas fehlen, dann melde Dich einfach oder füge es hinzu und sende mir eine Kopie der neuen Fassung zu.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Micha-Z

Registriert seit: 24. Nov 2009
5 Beiträge
 
#6

Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 9. Dez 2009, 20:42
Hallo RWarnecke

vielen Dank erst mal,
schau mir das gerne an!

GRuß
Micha
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 27. Jul 2010, 09:17
Hallo,

Hallo Micha,

schaue Dir mal meine Komponente TPrinterInfo an. Damit kannst Du fast alles auslesen, was in dem Fenster Drucker & Faxgeräte angezeigt wird.
Sollte etwas fehlen, dann melde Dich einfach oder füge es hinzu und sende mir eine Kopie der neuen Fassung zu.
ich habe sie jetzt auf einem Windows 2008-Server ausprobiert. Leider knallt es beim Auslesen der PPRinterInfo2 -Struktur ( FPrinterListName.Add(PPrinter^.pPrinterName); // Zeile 528 in GetPrinterListName)

Was kann das sein? (Auf einem XP-Rechner funktioniert es!)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 27. Jul 2010, 09:54
Leider knallt es beim Auslesen der PPRinterInfo2 -Struktur ( FPrinterListName.Add(PPrinter^.pPrinterName); // Zeile 528 in GetPrinterListName)
Was kann das sein? (Auf einem XP-Rechner funktioniert es!)
Da ist wohl ein Bug in folgender Methode (und auch anderen Methoden)
Erklärung:
Es wird ein neuer Record von PPrinterInfo2 im Speicher angelegt,
dann werden alle Daten aus dem Speicherblock Buffer übertragen
und dann wird der Record an die Liste FAllInfos angehängt.

Das ist die Idee hinter dem Code.
In Wirklichkeit werden hier aber keine Daten kopiert, sondern hauptsächlich Zeiger.
Und die Zeiger zeigen direkt in den Buffer hinein.
Mit dem letzten Befehl FreeMem(Buffer); wird der Puffer allerdings freigegeben
und die Zeiger verweisen auf freigegebenen Speicher.

Es hängt vom Zufall ab, wie lange es dauert bis es eine Zugriffsverletzung gibt.

Delphi-Quellcode:
procedure TPrinterCustom.GetAllPrinterInfos;
var
  pcbNeeded : DWORD;
  pcReturned : DWORD;
  Buffer : PChar;
  PrinterInfo: PChar;
  I : Integer;
  PPrinter : PPrinterInfo2;
  Flags : DWORD;
  Level : Byte;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    Flags := PRINTER_ENUM_CONNECTIONS or PRINTER_ENUM_LOCAL;
    Level := 2;
  end
  else
  begin
    Flags := PRINTER_ENUM_LOCAL;
    Level := 2;
  end;
  EnumPrinters(Flags, nil, Level, nil, 0, pcbNeeded, pcReturned);
  GetMem(Buffer, pcbNeeded);
  EnumPrinters(Flags, nil, Level, PByte(Buffer), pcbNeeded, pcbNeeded, pcReturned);
  PrinterInfo := Buffer;
  for I := 0 to pcReturned - 1 do
  begin
    New(PPrinter);
    with PPrinterInfo2(PrinterInfo)^ do
    begin
      PPrinter^.pServerName := pServerName; // kopiere PChar-Zeiger
      PPrinter^.pPrinterName := pPrinterName; // dito
      PPrinter^.pShareName := pShareName; // ...
      PPrinter^.pPortName := pPortName;
      PPrinter^.pDriverName := pDriverName;
      PPrinter^.pComment := pComment;
      PPrinter^.pLocation := pLocation;
      PPrinter^.pSepFile := pSepFile;
      PPrinter^.pPrintProcessor := pPrintProcessor;
      PPrinter^.pDatatype := pDatatype;
      PPrinter^.pParameters := pParameters;
      PPrinter^.Attributes := Attributes;
      PPrinter^.Priority := Priority;
      PPrinter^.DefaultPriority := DefaultPriority;
      PPrinter^.StartTime := StartTime;
      PPrinter^.UntilTime := UntilTime;
      PPrinter^.Status := Status;
      PPrinter^.cJobs := cJobs;
      PPrinter^.AveragePPM := AveragePPM;
      FAllInfos.Add(Pointer(PPrinter));
      Inc(PrinterInfo, SizeOf(TPrinterInfo2));
    end;
  end;
  FreeMem(Buffer);
end;
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Re: Drucker auslesen (Systemsteuerung --> Drucker & F

  Alt 27. Jul 2010, 10:46
Hallo,

Mit dem letzten Befehl FreeMem(Buffer); wird der Puffer allerdings freigegeben
und die Zeiger verweisen auf freigegebenen Speicher.

Es hängt vom Zufall ab, wie lange es dauert bis es eine Zugriffsverletzung gibt.
Du hast Recht. Was dort geschieht, war mir schon klar (habe nur das FreeMem am Ende der Routine übersehen). Funktioniert jetzt für mich (mit Speicherleck, aber das interessiert mich in meinem speziellen Fall nicht, weil das Programm nur 1x mal aufgerufen und danach nie wieder benötigt wird)

Danke!
Jörg
  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 06:37 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