Jawaban:
Coba ini:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
MessageBox.Show(printer);
}
Jika Anda memerlukan informasi lebih dari sekedar nama printer, Anda dapat menggunakan System.Management
API untuk menanyakannya:
var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer");
foreach (var printer in printerQuery.Get())
{
var name = printer.GetPropertyValue("Name");
var status = printer.GetPropertyValue("Status");
var isDefault = printer.GetPropertyValue("Default");
var isNetworkPrinter = printer.GetPropertyValue("Network");
Console.WriteLine("{0} (Status: {1}, Default: {2}, Network: {3}",
name, status, isDefault, isNetworkPrinter);
}
Lihat properti System.Drawing.Printing.PrinterSettings.InstalledPrinters statis .
Ini adalah daftar nama dari semua printer yang diinstal pada sistem.
Dapatkan Jaringan dan Daftar Printer Lokal di ASP.NET
Metode ini menggunakan Instrumentasi Manajemen Windows atau antarmuka WMI. Ini adalah teknologi yang digunakan untuk mendapatkan informasi tentang berbagai sistem (perangkat keras) yang berjalan pada Sistem Operasi Windows.
private void GetAllPrinterList()
{
ManagementScope objScope = new ManagementScope(ManagementPath.DefaultPath); //For the local Access
objScope.Connect();
SelectQuery selectQuery = new SelectQuery();
selectQuery.QueryString = "Select * from win32_Printer";
ManagementObjectSearcher MOS = new ManagementObjectSearcher(objScope, selectQuery);
ManagementObjectCollection MOC = MOS.Get();
foreach (ManagementObject mo in MOC)
{
lstPrinterList.Items.Add(mo["Name"].ToString());
}
}
Klik di sini untuk mengunduh demo sumber dan aplikasi
Demo aplikasi yang mencantumkan jaringan dan printer lokal
Anda juga dapat menggunakan kelas LocalPrintServer. Lihat: System.Printing.LocalPrintServer
public List<string> InstalledPrinters
{
get
{
return (from PrintQueue printer in new LocalPrintServer().GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
EnumeratedPrintQueueTypes.Connections }).ToList()
select printer.Name).ToList();
}
}
Seperti yang dinyatakan dalam dokumen: Kelas dalam Sistem. Ruang nama pencetakan tidak didukung untuk digunakan dalam layanan Windows atau aplikasi atau layanan ASP.NET.
Jika Anda bekerja dengan MVC C #, ini adalah cara untuk menangani printer dan port serial untuk dropdown.
using System.Collections.Generic;
using System.Linq;
using System.IO.Ports;
using System.Drawing.Printing;
public class Miclass
{
private void AllViews()
{
List<PortClass> ports = new List<PortClass>();
List<Printersclass> Printersfor = new List<Printersclass>();
string[] portnames = SerialPort.GetPortNames();
/*PORTS*/
for (int i = 0; i < portnames.Count(); i++)
{
ports.Add(new PortClass() { Name = portnames[i].Trim(), Desc = portnames[i].Trim() });
}
/*PRINTER*/
for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
{
Printersfor.Add(new Printersclass() { Name = PrinterSettings.InstalledPrinters[i].Trim(), Desc = PrinterSettings.InstalledPrinters[i].Trim() });
}
}
}
public class PortClass
{
public string Name { get; set; }
public string Desc { get; set; }
public override string ToString()
{
return string.Format("{0} ({1})", Name, Desc);
}
}
public class Printersclass
{
public string Name { get; set; }
public string Desc { get; set; }
public override string ToString()
{
return string.Format("{0} ({1})", Name, Desc);
}
}