如何获取计算机中所有打印机的列表

Gol*_*old 93 .net c# winforms

我需要获取连接到计算机的所有打印机的列表?

我怎么能用C#,WinForms做到这一点?

Joj*_*dez 181

试试这个:

foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
    MessageBox.Show(printer);
}
Run Code Online (Sandbox Code Playgroud)

  • 从来没有想过在System.Drawing中搜索这个! (5认同)

小智 51

如果您需要的信息不仅仅是打印机的名称,您可以使用System.ManagementAPI查询它们:

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);
}
Run Code Online (Sandbox Code Playgroud)


Run*_*tad 22

查看静态System.Drawing.Printing.PrinterSettings.InstalledPrinters属性.

它是系统上所有已安装打印机的名称列表.


小智 9

您还可以使用 LocalPrintServer 类。请参阅: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(); 
        } 
    }
Run Code Online (Sandbox Code Playgroud)

如文档中所述:不支持在 Windows 服务或 ASP.NET 应用程序或服务中使用 System.Printing 命名空间中的类。


小智 8

在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());
            }
        }
Run Code Online (Sandbox Code Playgroud)

单击此处下载源和应用程序演示

列出网络和本地打印机的应用程序的演示

在此输入图像描述