如何在C#中获取所有网络打印机

时间:2012-11-01 07:30:39

标签: .net

我写了以下代码但是没有得到远程打印机名称可以帮助我吗?

var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM 
                                             Win32_Printer");

var results = searcher.Get();

IList<ManagementBaseObject> printers = new List<ManagementBaseObject>();
`enter code here`
foreach (var printer in results) `enter code here`{
    if ((bool)printer["Network"]) `enter code here`{`enter code here`
        printers.Add(printer);`enter code here`
    }
}

2 个答案:

答案 0 :(得分:1)

我认为您必须更新您的代码,如下所示。

private void btnGetPrinters_Click(object sender, EventArgs e)
{
    // Use the ObjectQuery to get the list of configured printers
    var oquery = new System.Management.ObjectQuery("SELECT * FROM Win32_Printer");

    var mosearcher = new System.Management.ManagementObjectSearcher(oquery);

    System.Management.ManagementObjectCollection moc = mosearcher.Get();

    foreach (ManagementObject mo in moc)
    {
        System.Management.PropertyDataCollection pdc = mo.Properties;

        foreach (System.Management.PropertyData pd in pdc)
        {
            if ((bool)mo["Network"])
            {
                cmbPrinters.Items.Add(mo[pd.Name]);
            }
        }
    }
}

我是从Retrieve a List of Installed Printers on the Network Using WMI, C# and VB.NET

复制的

答案 1 :(得分:1)

如果要查找所有已安装的网络打印机的列表,则只需使用以下功能。

尝试通过创建控制台应用程序来运行以下内容。

您需要引用 System.Printing 命名空间。您需要通过右键单击添加引用并检查快照中以下所示的内容来手动添加对其库的引用。

Enter System.Printing Namespace to your local dll

完成后,请对控制台应用程序使用以下代码。我已在此处添加代码以显示网络和本地打印机。您可以选择您的特定选择。

using System.Printing;
namespace GetPrinters
{
    class Program
    {
        static void Main(string[] args)
        {
            var server = new PrintServer();
            Console.WriteLine("Listing Shared Printers");
            var queues = server.GetPrintQueues(new[]
            { EnumeratedPrintQueueTypes.Shared, EnumeratedPrintQueueTypes.Connections });
            foreach (var item in queues)
            {
                Console.WriteLine(item.FullName);
            }
            Console.WriteLine("\nListing Local Printers Now");
            queues = server.GetPrintQueues(new[]
            { EnumeratedPrintQueueTypes.Local });
            foreach (var item in queues)
            {
                Console.WriteLine(item.FullName);
            }
            Console.ReadLine();

        }
    }
}