Câu trả lời:
Thử cái này:
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
MessageBox.Show(printer);
}
Nếu bạn cần thêm thông tin ngoài tên của máy in, bạn có thể sử dụng System.Management
API để truy vấn chúng:
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);
}
Nhìn vào thuộc tính System.Drawing.Printing.PrinterSettings.InstalledPrinters tĩnh .
Đây là danh sách tên của tất cả các máy in được cài đặt trên hệ thống.
Nhận danh sách mạng và máy in cục bộ trong ASP.NET
Phương pháp này sử dụng Công cụ quản lý Windows hoặc giao diện WMI. Đó là một công nghệ được sử dụng để lấy thông tin về các hệ thống (phần cứng) khác nhau đang chạy trên Hệ điều hành 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());
}
}
Bấm vào đây để tải xuống nguồn và bản demo ứng dụng
Demo ứng dụng liệt kê mạng và máy in cục bộ
Bạn cũng có thể sử dụng lớp LocalPrintServer. Xem: 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();
}
}
Như đã nêu trong tài liệu: Các lớp trong không gian tên Hệ thống. In không được hỗ trợ để sử dụng trong dịch vụ Windows hoặc ứng dụng hoặc dịch vụ ASP.NET.
Nếu bạn đang làm việc với MVC C #, đây là cách xử lý máy in và các cổng nối tiếp cho trình đơn thả xuống.
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);
}
}