Jak pobrać nazwy drukarek w języku C

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

Znajomość drukarek dostępnych w systemie jest częstym warunkiem wstępnym dla każdej aplikacji .NET, która wysyła dokumenty do druku. Niezależnie od tego, czy celem jest umożliwienie użytkownikom wyboru drukarki z listy rozwijanej, czy automatyczne kierowanie zadań drukowania do określonego urządzenia, pierwszym krokiem jest programowe pobranie nazw drukarek.

IronPrint udostępnia jedną statyczną metodę — Printer.GetPrinterNames() — która zwraca wszystkie zainstalowane drukarki na bieżącej maszynie Windows jako List<string>. Poniżej omówimy instalację, pobieranie synchroniczne i asynchroniczne oraz sposób podania nazwy wybranej drukarki w zadaniu drukowania.

Szybki start: Pobieranie nazw drukarek

  1. Zainstaluj IronPrint przez NuGet: Install-Package IronPrint
  2. Dodaj using IronPrint; do pliku
  3. Wywołaj Printer.GetPrinterNames(), aby uzyskać List<string> z nazwami drukarek
  4. Iteruj po liście i wyświetlaj lub zapisuj każdą nazwę
  5. Przekaż wybraną nazwę do PrintSettings.PrinterName podczas drukowania
  1. Install IronPrint with NuGet Package Manager

    PM > Install-Package IronPrint
  2. Skopiuj i uruchom ten fragment kodu.

    using IronPrint;
    
    // Retrieve every printer installed on this machine
    List<string> printers = Printer.GetPrinterNames();
    
    foreach (var name in printers)
    {
        Console.WriteLine(name);
    }
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPrint w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak mogę wylistować wszystkie zainstalowane nazwy drukarek?

Printer.GetPrinterNames() przesłuchuje system operacyjny i zwraca każdą zarejestrowaną drukarkę jako List<string>. Wywołujemy tę metodę raz i iterujemy po wyniku:

: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;

// Get every printer registered on this Windows machine
List<string> printerNames = Printer.GetPrinterNames();

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

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

' Get every printer registered on this Windows machine
Dim printerNames As List(Of String) = Printer.GetPrinterNames()

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

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

Wynik konsoli

Znaleziono 3 drukarki:

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

Zwrócona lista zawiera drukarki lokalne, sieciowe i wirtualne sterowniki druku. Każdy łańcuch znaków odpowiada dokładnej nazwie pokazanej w panelu Windows Ustawienia > Drukarki i skanery, więc może być używany bezpośrednio w konfiguracji ustawień druku.

Jeśli nie ma zainstalowanych drukarek, metoda zwraca pustą listę zamiast rzucać wyjątek. Szybka kontrola printerNames.Count jest wszystkim, co jest potrzebne, zanim zaprezentuje się opcje użytkownikowi.

Jak mogę pobrać nazwy drukarek asynchronicznie?

Dla aplikacji, w których blokowanie wątku UI jest nieakceptowalne — WPF, MAUI lub aplikacje webowe ASP.NET — IronPrint oferuje Printer.GetPrinterNamesAsync(). Metoda zwraca Task<List<string>> i działa identycznie jak jej synchroniczny odpowiednik:

: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;

// Await the async call to avoid blocking the UI thread
List<string> printerNames = await Printer.GetPrinterNamesAsync();

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

' Await the async call to avoid blocking the UI thread
Dim printerNames As List(Of String) = Await Printer.GetPrinterNamesAsync()

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

Wywołujemy await, tak jak każdą inną asynchroniczną API. Wynik jest taki sam List<string> zwrócony przez GetPrinterNames(), więc nie jest potrzebny dodatkowy parsing czy konwersja. Ten wzorzec asynchroniczny integruje się naturalnie z async Task akcjami kontrolera i async void obsługą zdarzeń.

Jak mogę wydrukować na konkretną drukarkę według nazwy?

Gdy mamy nazwę drukarki, przypisujemy ją do PrintSettings.PrinterName i przekazujemy obiekt ustawień do Printer.Print(). To wysyła dokument bezpośrednio do wybranej drukarki bez wyświetlania dialogu:

: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;

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

// Step 2 — Select a printer (first match containing "LaserJet" as an example)
string targetPrinter = printers.Find(p => p.Contains("LaserJet"))
                       ?? printers[0]; // fallback to first available

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

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

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

' Step 2 — Select a printer (first match containing "LaserJet" as an example)
Dim targetPrinter As String = printers.Find(Function(p) p.Contains("LaserJet")) _
                       OrElse printers(0) ' fallback to first available

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

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

PrintSettings obsługuje dodatkowe właściwości, takie jak Dpi, PaperOrientation, Grayscale i PaperMargins. Zobacz pełną listę w dokumentacja API PrintSettings oraz przewodnik konfiguracji ustawień druku.

Pobieramy również dostępne tace papieru dla danej drukarki za pomocą Printer.GetPrinterTrays(printerName), co jest przydatne, gdy zadanie drukowania ma pobierać papier ze specyficznej tacy.

Jakie są moje kolejne kroki?

Omówiliśmy cztery operacje: instalowanie IronPrint, listowanie wszystkich nazw drukarek z GetPrinterNames(), wykonywanie tego samego zapytania asynchronicznie z GetPrinterNamesAsync() i kierowanie dokumentu do konkretnej drukarki przez PrintSettings.PrinterName.

Dla dalszego czytania i głębszych przykładów, eksploruj te zasoby:

Samouczki IronPrint — Drukuj Dokument dla pełnego przewodnika po drukowaniu.

Uzyskaj bezpłatną licencję próbną, aby przetestować każdą funkcję w rzeczywistym środowisku, lub zobacz opcje licencyjne, gdy będziesz gotowy do wdrożenia.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 38,948 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPrint
uruchom próbkę obserwuj, jak twój dokument trafia do drukarki.