C# 如何获取计算机中所有打印机的列表
我需要获取所有连接到计算机的打印机的列表 如何在C、WinForms中实现这一点?请查看静态属性 它是系统上所有已安装打印机的名称列表 试试这个:C# 如何获取计算机中所有打印机的列表,c#,.net,winforms,C#,.net,Winforms,我需要获取所有连接到计算机的打印机的列表 如何在C、WinForms中实现这一点?请查看静态属性 它是系统上所有已安装打印机的名称列表 试试这个: foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters) { MessageBox.Show(printer); } 如果您需要的信息不仅仅是打印机名称,还可以使用System.Management API查询这些信息: var
foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
MessageBox.Show(printer);
}
如果您需要的信息不仅仅是打印机名称,还可以使用System.Management API查询这些信息:
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);
}
在ASP.NET中获取网络和本地打印机列表
此方法使用Windows Management Instrumentation或WMI接口。它是一种用于获取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());
}
}
演示列出网络和本地打印机的应用程序
您还可以使用LocalPrintServer类。见:
如文档中所述:Windows服务或ASP.NET应用程序或服务中不支持System.Printing命名空间中的类。如果您使用的是MVC,这是处理下拉列表中的打印机和串行端口的方法
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);
}
}
谢谢你的MSDN链接!你能为代码添加一个解释吗?这是一个非常有趣的答案。如果您只需要姓名,则接受的答案是正确的。如果您需要其他数据,使用对win32_打印机的查询要比执行此调用慢得多。这是获取所有信息的最佳答案。您的演示也在ASP.NET中吗?从未想过在System.Drawing中搜索此内容!
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);
}
}