15

PCに接続されているプリンターを列挙しています。C#System.Printing名前空間を使用して実行しました。それはうまくいきます。しかし、ほとんどの場合、Microsoft XPS ドキュメント ライター、Microsoft Faxなどのソフトウェア プリンターが表示されます。これらのソフトウェア プリンターを列挙から削除できるかどうかを知りたいです。私が行ったコードは以下のとおりです。

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

4 に答える 4

12

実プリンターと仮想プリンターを区別する鍵は、プリンターが使用しているポートです。実際のプリンターは、LPT1: または USB ポートなどのハードウェア ポートを使用します。仮想プリンターは、ソフトウェア主導のポートを使用します。

複雑なのはネットワークプリンターです。ネットワーク プリンターがハードウェア ポートを使用しているかどうかを判断するのは簡単ではありません。

これが素晴らしい答えではないことはわかっていますが、あなたは非常に難しい質問をしました。それがあなたの正しい方向へのスタートになることを願っています。

于 2013-04-13T01:06:14.603 に答える
6

私が見つけた唯一の方法は、目的のプリンターの名前と取得中のプリンターの名前を比較することです。

于 2013-05-23T09:22:55.087 に答える
3

いくつかの観察:

  1. このPropertiesウィンドウでは、Device Settingsページは実際のプリンターでのみ使用でき、仮想プリンターでは使用できません。そして、これらの値のほとんどはprintQueue.UserPrintTicketプロパティで利用可能です

  2. printQueue.QueuePort.NameIPポート名の有無にかかわらず追加されたアドレスが含まれています。例: 実プリンターの場合は「20.120.12.22_1」または「20.120.12.22」

ここに画像の説明を入力

于 2013-05-28T03:29:51.620 に答える