You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用PrintServer.GetPrintQueues无法检测到PC上的网络打印机?

如何正确检测本地PC上的网络打印机

我需要检测本地PC上的网络打印机,尝试了以下代码,但返回结果为空:

PrintQueueCollection networkQueues;

using (var printServer = new PrintServer())
{
    var flags = new[] { EnumeratedPrintQueueTypes.Shared, EnumeratedPrintQueueTypes.Connections };
    networkQueues = printServer.GetPrintQueues(flags);
}

但实际本地有两台网络打印机,通过以下代码可以检测到所有已安装的打印机(包括这两台网络打印机):

var printerNames = PrinterSettings.InstalledPrinters;

问题原因

PrintServer.GetPrintQueues的EnumeratedPrintQueueTypes.Connections仅识别通过打印服务器共享的网络打印机,如果你的网络打印机是直接通过TCP/IP端口安装的(本地直连的网络设备,而非域打印服务器共享的),这个枚举值无法匹配这类打印机。而PrinterSettings.InstalledPrinters会列出系统中所有已安装的打印机,无论类型,所以能正常显示目标设备。

解决方案

可以先获取所有已安装的打印机,再筛选出网络打印机:

方法1:使用PrinterSettings筛选

List<string> networkPrinterNames = new List<string>();
foreach (string printerName in PrinterSettings.InstalledPrinters)
{
    using (PrinterSettings settings = new PrinterSettings())
    {
        settings.PrinterName = printerName;
        if (!settings.IsLocal && settings.IsNetwork)
        {
            networkPrinterNames.Add(printerName);
        }
    }
}

方法2:结合PrintQueue获取详细信息

List<PrintQueue> networkPrintQueues = new List<PrintQueue>();
foreach (string printerName in PrinterSettings.InstalledPrinters)
{
    try
    {
        using (PrintQueue queue = new PrintQueue(new PrintServer(), printerName))
        {
            if (!queue.IsLocal)
            {
                networkPrintQueues.Add(queue);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"无法读取打印机 {printerName} 信息: {ex.Message}");
    }
}

内容的提问来源于stack exchange,提问作者Fabrizio Ciavatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:20:08