Wie rufe ich Druckernamen in C# ab?

This article was translated from English: Does it need improvement?
Translated
View the article in English

Die Kenntnis darüber, welche Drucker auf einem System verfügbar sind, ist eine häufige Voraussetzung für jede .NET-Anwendung, die Dokumente zum Drucken sendet. Ob das Ziel darin besteht, Benutzern die Auswahl eines Druckers aus einem Dropdown zu ermöglichen oder Druckaufträge automatisch an ein bestimmtes Gerät zu leiten, das Programmatische Abrufen von Druckernamen ist der erste Schritt.

IronPrint stellt eine einzige statische Methode bereit – Printer.GetPrinterNames() –, die jeden auf dem aktuellen Windows-Rechner installierten Drucker als List<string> zurückgibt. Wir behandeln Installation, synchrone und asynchrone Abfragen sowie wie man einen ausgewählten Druckernamen in einen Druckauftrag einfügt unten.

Schnellstart: Druckernamen abrufen

  1. Installieren Sie IronPrint über NuGet: Install-Package IronPrint
  2. Fügen Sie using IronPrint; zur Datei hinzu
  3. Rufen Sie Printer.GetPrinterNames() auf, um eine List<string> mit Druckernamen zu erhalten
  4. Durchlaufen Sie die Liste und zeigen Sie jeden Namen an oder speichern Sie ihn
  5. Übergeben Sie beim PRINT einen ausgewählten Namen an PrintSettings.PrinterName
  1. Installieren Sie IronPrint mit NuGet Package Manager

    PM > Install-Package IronPrint
  2. Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.

    using IronPrint;
    
    // Retrieve every printer installed on this machine
    List<string> printers = Printer.GetPrinterNames();
    
    foreach (var name in printers)
    {
        Console.WriteLine(name);
    }
  3. Bereitstellen zum Testen in Ihrer Live-Umgebung

    Beginnen Sie noch heute, IronPrint in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion

    arrow pointer

Wie kann ich alle installierten Druckernamen auflisten?

Printer.GetPrinterNames() fragt das Betriebssystem ab und gibt jeden registrierten Drucker als List<string> zurück. Wir rufen diese Methode einmal auf und durchlaufen das Ergebnis:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-list-all-printers.cs
using IronPrint;
using System;
using System.Collections.Generic;

// List every installed printer
List<string> printerNames = Printer.GetPrinterNames();

Console.WriteLine($"Found {printerNames.Count} printer(s):\n");

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine($"  • {name}");
}
Imports IronPrint
Imports System
Imports System.Collections.Generic

' List every installed printer
Dim printerNames As List(Of String) = Printer.GetPrinterNames()

Console.WriteLine($"Found {printerNames.Count} printer(s):" & vbCrLf)

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine($"  • {name}")
Next
$vbLabelText   $csharpLabel

Konsolenausgabe

3 Drucker gefunden:

  • Microsoft Print to PDF
  • HP LaserJet Pro MFP M428
  • OneNote (Desktop)

Die zurückgegebene Liste umfasst lokale Drucker, Netzwerkdrucker und virtuelle Druckertreiber. Jede Zeichenkette entspricht dem genauen Namen, der im Windows-Bedienfeld Einstellungen > Drucker & Scanner angezeigt wird, sodass sie direkt in der Druckeinstellungen-Konfiguration verwendet werden kann.

Wenn keine Drucker installiert sind, gibt die Methode anstelle eines Fehlers eine leere Liste zurück. Eine kurze Überprüfung von printerNames.Count ist alles, was erforderlich ist, bevor dem Benutzer Optionen präsentiert werden.

Wie rufe ich Druckernamen asynchron ab?

Für Anwendungen, bei denen das Blockieren des UI-Threads nicht akzeptabel ist – WPF-, MAUI- oder ASP.NET-Webanwendungen – bietet IronPrint Printer.GetPrinterNamesAsync(). Die Methode gibt einen Task<List<string>> zurück und funktioniert identisch wie ihr synchrones Pendant:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-async-printer-names.cs
using IronPrint;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

// Retrieve printer names asynchronously
List<string> printerNames = await Printer.GetPrinterNamesAsync();

// Print each printer name
foreach (string name in printerNames)
{
    Console.WriteLine(name);
}
Imports IronPrint
Imports System
Imports System.Collections.Generic
Imports System.Threading.Tasks

' Retrieve printer names asynchronously
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()

' Print each printer name
For Each name As String In printerNames
    Console.WriteLine(name)
Next
$vbLabelText   $csharpLabel

Wir await den Aufruf genau wie jede andere asynchrone API. Das Ergebnis ist dasselbe List<string>, das von GetPrinterNames() zurückgegeben wird, sodass keine zusätzliche Analyse oder Konvertierung erforderlich ist. Dieses asynchrone Muster lässt sich nahtlos in async Task Controller-Aktionen und async void Ereignisbehandler integrieren.

Wie drucke ich zu einem bestimmten Drucker nach Namen?

Sobald wir den Druckernamen haben, weisen wir ihn PrintSettings.PrinterName zu und übergeben das Einstellungsobjekt an Printer.Print(). Dadurch wird das Dokument direkt an den ausgewählten Drucker gesendet, ohne einen Dialog anzuzeigen:

:path=/static-assets/print/content-code-examples/how-to/retrieve-printer-names/retrieve-printer-names-print-to-specific-printer.cs
using IronPrint;
using System.Collections.Generic;

// Retrieve available printers
List<string> printers = Printer.GetPrinterNames();

// Select a printer matching "LaserJet", or fall back to the first available
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
                       ?? printers[0];

// Configure print settings
PrintSettings settings = new PrintSettings
{
    PrinterName = targetPrinter,
    PaperSize = PaperSize.A4,
    NumberOfCopies = 1
};

// Print the document
Printer.Print("invoice.pdf", settings);
Imports IronPrint
Imports System.Collections.Generic

' Retrieve available printers
Dim printers As List(Of String) = Printer.GetPrinterNames()

' Select a printer matching "LaserJet", or fall back to the first available
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
                       OrElse printers(0)

' Configure print settings
Dim settings As New PrintSettings With {
    .PrinterName = targetPrinter,
    .PaperSize = PaperSize.A4,
    .NumberOfCopies = 1
}

' Print the document
Printer.Print("invoice.pdf", settings)
$vbLabelText   $csharpLabel

PrintSettings unterstützt zusätzliche Eigenschaften wie Dpi, PaperOrientation, Grayscale und PaperMargins. Siehe die vollständige Liste in der API-Referenz zu den PrintSettings und der Leitfaden für Druckeinstellungen.

Wir rufen außerdem die verfügbaren Papierfächer für einen bestimmten Drucker mithilfe von Printer.GetPrinterTrays(printerName) ab, was nützlich ist, wenn ein Druckauftrag Papier aus einem bestimmten Fach beziehen muss.

Was sind meine nächsten Schritte?

Wir haben vier Vorgänge behandelt: die Installation von IronPrint, das Auflisten aller Druckernamen mit GetPrinterNames(), das asynchrone Ausführen derselben Abfrage mit GetPrinterNamesAsync() und das Weiterleiten eines Dokuments an einen bestimmten Drucker über PrintSettings.PrinterName.

Für weiterführende Literatur und detailliertere Beispiele erkunden Sie diese Ressourcen:

Holen Sie sich eine kostenlose Testlizenz, um jede Funktion in einer Live-Umgebung zu testen, oder sehen Sie sich die Lizenzierungsoptionen an, wenn Sie bereit sind, zu starten.

Häufig gestellte Fragen

Was ist der einfachste Weg, Druckernamen in C# abzurufen?

Der einfachste Weg, Druckernamen in C# abzurufen, ist die Verwendung von IronPrint .NET, mit dem Sie eine Liste installierter Drucker mit einem einzigen Methodenaufruf erhalten können.

Kann ich Druckernamen asynchron mit IronPrint abrufen?

Ja, IronPrint .NET unterstützt asynchrone Vorgänge, sodass Sie Druckernamen abrufen können, ohne den Haupt-Thread zu blockieren.

Ist es möglich, mit IronPrint an einen bestimmten Drucker nach Name zu drucken?

Ja, IronPrint .NET erlaubt es Ihnen, den Druckernamen anzugeben, sodass Sie Dokumente direkt an jeden installierten Drucker Ihrer Wahl drucken können.

Unterstützt IronPrint das Abrufen von Druckernamen auf allen .NET-Plattformen?

IronPrint .NET ist darauf ausgelegt, mit verschiedenen .NET-Plattformen zu arbeiten, sodass Sie nahtlos Druckernamen in unterschiedlichen Umgebungen abrufen können.

Wie handhabt IronPrint Druckernamen in einem vernetzten Umfeld?

IronPrint .NET kann Druckernamen von sowohl lokalen als auch vernetzten Druckern abrufen, was es vielseitig für die Verwendung in verschiedenen Netzwerk-Konfigurationen macht.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 41,154 | Version: 2026.5 just released
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronPrint
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihr Dokument auf dem Drucker ausgegeben wird.