2013-04-09 11 views
15

मैं पीसी में जुड़े प्रिंटर की गणना कर रहा हूं। मैंने इसे सी # System.Printing नामस्थान का उपयोग करके किया। यह अच्छी तरह से काम करता है। लेकिन ज्यादातर यह सॉफ्टवेयर प्रिंटर जैसे माइक्रोसॉफ्ट एक्सपीएस दस्तावेज़ लेखक, माइक्रोसॉफ्ट फैक्स आदि दिखाता है। मैं जानना चाहता हूं कि इन सॉफ़्टवेयर प्रिंटर को गणना से हटा देना संभव है। मैंने जो कोड किया है वह नीचे दिखाया गया है:मूल प्रिंटर को पहचानें

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

वर्चुअल प्रिंटर से वास्तविक प्रिंटर को अलग करने की कुंजी प्रिंटर का उपयोग कर पोर्ट है। असली प्रिंटर हार्डवेयर पोर्ट्स जैसे एलपीटी 1: या यूएसबी पोर्ट का उपयोग करते हैं। वर्चुअल प्रिंटर सॉफ़्टवेयर संचालित पोर्ट का उपयोग करते हैं।

जटिलता नेटवर्क प्रिंटर होंगे। नेटवर्क प्रिंटर हार्डवेयर पोर्ट का उपयोग कर रहा है या नहीं यह आसान नहीं होगा।

मुझे पता है कि यह एक अच्छा जवाब नहीं है लेकिन आपने एक बहुत ही कठिन सवाल उठाया है। मुझे उम्मीद है कि यह आपकी सही दिशा में शुरू हो जाएगा।

+0

बहुत मजेदार बात यह है कि मैं नेटवर्क प्रिंटर का उपयोग कर रहा हूं :) – Zigma

+1

मैंने पिछले कुछ दिनों में यह बहुत सोचा है, और मुझे लगता है कि मुझे विंडोज प्रिंटिंग उपप्रणाली के साथ-साथ पता है माइक्रोसॉफ्ट के बाहर कोई भी, और ... अच्छा, मुझे डर है कि मुझे नहीं लगता कि सभी मामलों में हार्डवेयर और वर्चुअल प्रिंटर के बीच भरोसेमंद अंतर करने का एक तरीका है। मैं आपको "आमतौर पर सही" समाधान दे सकता हूं, लेकिन मुझे नहीं लगता कि "हमेशा सही" समाधान संभव है। माफ़ कीजिये। :-( –

3

कुछ टिप्पणियों:

  1. Properties विंडो में Device Settings पृष्ठ रियल प्रिंटर के लिए और न केवल आभासी प्रिंटर के लिए उपलब्ध है। और इन मूल्यों का सबसे printQueue.UserPrintTicket प्रॉपर्टी में उपलब्ध

  2. printQueue.QueuePort.Name एक IP पते के साथ या पोर्ट नाम के बिना संलग्न हैं। उदाहरण: "20.120.12.22_1" या "20.120.12.22" रियल प्रिंटर

enter image description here

+0

प्रिंट ड्राइवर और पोर्ट मॉनीटर इन दोनों चीजों को नियंत्रित करते हैं और वे कृपया कर सकते हैं। मैं आपको ऐसे उदाहरण दिखा सकता हूं जो आपके निष्कर्षों से मेल नहीं खाते हैं। –

+0

@CareyGregory: यह जांच लेंगे .. धन्यवाद! –

+0

यह गलत है। सॉफ़्टवेयर प्रिंटर के साथ पोर्ट भी हैं। – Zigma

2

आप Print Spooler API उपयोग कर सकते हैं प्रिंटर और printjobs का प्रबंधन करने के लिए। विशेष रूप से EnumPrinters फ़ंक्शन आपके लिए उपयोगी हो सकता है। आप सी # रैपर को Pinvoke.net

संबंधित मुद्दे