识别原始打印机

Zig*_*gma 15 c# printers

我列举了连接在PC上的打印机.我是用C#System.Printing命名空间完成的.它运作良好.但主要是它显示软件打印机,如Microsoft XPS Document writer,Microsoft Fax等.我想知道是否可以从枚举中删除这些ssoftware打印机.我所做的代码如下所示:

PrintQueue printQueue = null;

LocalPrintServer localPrintServer = new LocalPrintServer();

// Retrieving collection of local printer on user machine
PrintQueueCollection localPrinterCollection =
    localPrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
                                            EnumeratedPrintQueueTypes.Connections });

System.Collections.IEnumerator localPrinterEnumerator =
    localPrinterCollection.GetEnumerator();

while (localPrinterEnumerator.MoveNext())
{
    // Get PrintQueue from first available printer
    printQueue = (PrintQueue)localPrinterEnumerator.Current;

    if (!printQueue.IsOffline)
    {
        MessageBox.Show(printQueue.FullName.ToString());
        string s = "Printer found " + printQueue.FullName.ToString();
        listBox1.Items.Add(s);
    }
    else
    {
        // No printer exist, return null PrintTicket 
        // return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Car*_*ory 12

区分真实打印机和虚拟打印机的关键是打印机正在使用的端口.真正的打印机使用硬件端口,如LPT1:或USB端口.虚拟打印机使用软件驱动的端口.

复杂的是网络打印机.确定网络打印机是否使用硬件端口并不容易.

我知道这不是一个很好的答案,但你提出了一个非常困难的问题.我希望它能让你开始朝着正确的方向前进.


Zig*_*gma 6

我发现的唯一方法是将所需打印机的名称与我们获得的打印机的名称进行比较.