2013-04-09 7 views
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; 
    } 
} 

答えて

6

私が見つけた唯一の方法は、希望のプリンタの名前と現在入手しているプリンタの名前を比較することです。

12

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

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

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

+0

私はネットワークプリンタを使用しています: – Zigma

+1

私はこれを数日間考えましたが、私はWindows印刷サブシステムと同様にMicrosoftの外にいる人、そして...まあ、すべてのケースでハードウェアと仮想プリンタを確実に区別する方法はないと思います。私はあなたに「普通は正しい」解決策を与えることができますが、「常に正しい」解決策は考えられません。ごめんなさい。 :-( –

3

少数の観測:Propertiesウィンドウで

  1. Device Settingsページは、仮想プリンタの唯一の本当のプリンタで利用可能なとはありません。これらの値の大部分は、printQueue.UserPrintTicketプロパティで利用可能です。

  2. には、ポート名の付いているか付いていないアドレスが追加されています。例:実プリンタの "20.120.12.22_1" または "20.120.12.22"

enter image description here

+0

プリントドライバとポートモニタは、これらの両方を制御してくれます。あなたの所見と一致しないサンプルを表示できます。 –

+0

@CareyGregory:それをチェックします。ありがとう! –

+0

これは間違っています。 – Zigma

関連する問題