2

我写了下面的代码,它没有得到远程打印机的名称有人可以帮我吗?

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`
    }
}
4

2 回答 2

4

如果您正在寻找所有已安装网络打印机的列表,那么您可以简单地使用以下功能。

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

您需要引用System.Printing命名空间。您需要手动添加对其库的引用,方法是右键单击“添加引用”并检查相同的内容,如下面的快照所示。

将 System.Printing 命名空间输入到本地 dll

完成后,将以下代码用于您的控制台应用程序。我在此处添加了代码以同时显示 Network 和 Local Printers。您可以选择您的特定选择。

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();

        }
    }
}
于 2018-08-24T11:18:54.303 回答
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复制了它

于 2012-11-01T08:59:37.227 回答