Laden...

PrinterSettings-Klasse -> PrintToFile

Erstellt von tikra vor 16 Jahren Letzter Beitrag vor 15 Jahren 1.864 Views
tikra Themenstarter:in
185 Beiträge seit 2007
vor 16 Jahren
PrinterSettings-Klasse -> PrintToFile

Im Dateianhang seht ihr worauf ich gerne zugreifen möchte.

Ich würde gerne in einer Funktion die PHYSISCHEN (realen) Drucker herausfinden, sprich Microsofts Document Writer, Postscript-Drucker oder pdf-Drucker á la "FreePDF" herausfiltern.

Eine Lösung habe ich über biegen und brechen zwar am laufen, diese gefällt mir aber nicht und ist auch nicht 100% konsistent.

Die einfachste Möglichkeit wäre (glaube ich) die Strings in den Druckereingeschaften auszulesen und auszuwerten, hierzu würde sowohl das Feld "Anschlüsse" als auch das Feld "Beschreibung" mir weiterhelfen.

Gibt es eine Möglichkeit an diese Informationen zu kommen?

Gibt es andere Lösungsansätze?

1.820 Beiträge seit 2005
vor 16 Jahren

Hallo!

Sie dir mal die Klasse PrinterSettings an, da findest du alles, was du brauchst.

Nobody is perfect. I'm sad, i'm not nobody 🙁

tikra Themenstarter:in
185 Beiträge seit 2007
vor 16 Jahren

Erstmal mit

foreach (string printerName in PrinterSettings.InstalledPrinters)
            {

            }

die Drucker durchlaufen, aber wie rufe ich diese Funktion für den einzelnen Drucker auf?

        //
        // Zusammenfassung:
        //     Ruft einen Wert ab, der angibt, ob die Druckausgabe nicht an einen Druckeranschluss,
        //     sondern an eine Datei gesendet wird.
        //
        // Rückgabewerte:
        //     true, wenn die Druckausgabe an eine Datei gesendet wird, andernfalls false.
        //     Der Standardwert ist false.
        public bool PrintToFile { get; set; }

Dies funktioniert nicht:

            PrinterSettings test = new PrinterSettings();

            test.PrinterName = @"FreePDF XP";

            if (test.PrintToFile)
                MessageBox.Show("to file");
            else
                MessageBox.Show("not to file");
tikra Themenstarter:in
185 Beiträge seit 2007
vor 16 Jahren

Hätte eventuell noch jemand eine Idee?

Grüße

4.942 Beiträge seit 2008
vor 16 Jahren

Ich denke, mit .NET-Mitteln wirst du nicht an die internen Daten herankommen, sondern du mußt dann schon die Win-API benutzen:
Hier gibt es eine Liste aller Printer-Strukturen:
http://msdn2.microsoft.com/de-de/library/ms535665(en-us,VS.85).aspx

tikra Themenstarter:in
185 Beiträge seit 2007
vor 15 Jahren

Wie greife ich denn auf diese einzelnen Strukturen zu?
Welche DLL muss ich da einbinden und wie lege ich fest, von welchem Drucker ich eines der Strukturen abrufen möchte?

Kann damit nicht wirklich viel anfangen, tut mir leid. 🙁

915 Beiträge seit 2006
vor 15 Jahren

Hrm, um am Effektivsten mit der Windowsdokumentation zu arbeiten wie sie dir Th69für die winspool.drv gegeben hat. Klickst die jeweiligen Links der Druckerinformationen an. Wenn also z.B. den Link für PORT_INFO_1 anklickst, siehst dann oberhalb die erklärung und unterhalb davon ein "See Also: Printing and Print Spooler Overview, Printing and Print Spooler Structures, EnumPorts " wenn du diesen Link folgst oder teilweise diese Linknamen kopierst und auf www.pinvoke.net suchst bekommst du bereits die vorgefertigten Dll Imports + Beispiel wie man es verwendet.

Bei dir wäre das z.B. um die Ports auszulesen folgender Link.

Die Microsoftseiten sind übrigens alle so aufgebaut das unter "See Also" eigentlich immer den DLL Importnamen oder das Stichwort für den DLL Import findest. Somit braucht man theoretisch nichtmal die Dokumentation durchlesen, sondern gelangt sofort auf ein Codebeispiel(e) 🙂

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(