2008-11-17 18 views
44

मानक प्रिंटडिअलॉग में चयनित प्रिंटर से जुड़े चार मान हैं: स्थिति, प्रकार, कहां, और टिप्पणी।.NET में प्रिंटर जानकारी कैसे प्राप्त करें?

यदि मुझे प्रिंटर का नाम पता है, तो मैं इन मानों को सी # 2.0 में कैसे प्राप्त कर सकता हूं?

उत्तर

62

dowski suggested के रूप में, आप प्रिंटर गुण प्राप्त करने के लिए WMI का उपयोग कर सकते हैं। निम्न कोड किसी दिए गए प्रिंटर नाम के लिए सभी गुण प्रदर्शित करता है। उनमें से आप पाएँगे: PrinterStatus, टिप्पणी, स्थान, drivername, PORTNAME, आदि

using System.Management; 

...

string printerName = "YourPrinterName"; 
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) 
using (ManagementObjectCollection coll = searcher.Get()) 
{ 
    try 
    { 
     foreach (ManagementObject printer in coll) 
     { 
      foreach (PropertyData property in printer.Properties) 
      { 
       Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value)); 
      } 
     } 
    } 
    catch (ManagementException ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 
+3

में उपलब्ध नहीं है, यह काम करता है, मैं आवश्यक सभी गुणों को ढूंढ और पढ़ने में सक्षम था। धन्यवाद! प्रिंटर के गुणों में –

+1

मैं प्रिंटर.प्रॉपर्टीज ["प्रिंटरस्टैटस"] का उपयोग कर रहा हूं। मूल्य, और यह मुझे मूल्य दे रहा है 2. इस मान का अर्थ क्या है i.e. 2? क्या कोई सूची है जहां हम लौटाए गए मूल्यों का अर्थ जान सकते हैं? – HotTester

+0

मेरे पास एचपी स्कैनजेट 55 9 0 स्कैनर है, सभी ड्राइवर स्थापित हैं और यह डॉक्स स्कैनिंग ठीक है। लेकिन जब मैं स्कैनर की स्थिति प्राप्त करने के लिए डब्लूएमआई का उपयोग करता हूं, तो डब्लूएमआई इसका पता नहीं लगा रहा है। विन -7 के नियंत्रण कक्ष में, यह मुख्य उपकरणों के तहत दिखाया गया है और डिवाइस और प्रिंटर अनुभाग में मुख्य प्रिंटर के तहत नहीं। स्कैनर की स्थिति कैसे प्राप्त करें? – HotTester

2

यह एक लंबा समय रहा है क्योंकि मैंने विंडोज वातावरण में काम किया है, लेकिन मैं सुझाव दूंगा कि आप using WMI देखें।

22

यह चाहिए काम पर देखो।

using System.Drawing.Printing; 

...

PrinterSettings ps = new PrinterSettings(); 
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting 

उसके बाद, PrinterSettings के विभिन्न properties पढ़ा जा सकता है।

ध्यान दें कि ps.isValid() देख सकता है कि प्रिंटर वास्तव में मौजूद है या नहीं।

संपादित करें: एक अतिरिक्त टिप्पणी। माइक्रोसॉफ्ट आपको PrintDocument का उपयोग करने की सलाह देता है और प्रिंटर सेटिंग्स को सीधे प्रिंटर सेटिंग्स बनाने के बजाय संशोधित करता है।

+0

उर पद वास्तव में मदद की। लेकिन मुझे आईपीए पता और पोर्ट नाम भी चाहिए। चयनित/लोड प्रिंटर के लिए आईपी पता और पोर्ट नाम कैसे प्राप्त करें ...? – Ashutosh

+0

चयनित उत्तर विधि का उपयोग करके ऐसा करने का एक बुरा तरीका है, यह प्रिंटर के लिए सर्वर का नाम देता है और यदि हम उस नाम को पिंग करते हैं तो यह आईपी पते पर हल हो जाता है और वहां पिंग परिणाम को पार्स किया जा सकता है। कृपया मुझे बताएं कि – Ashutosh

+0

करने का कोई बेहतर तरीका है। मैं .NET 4.5 का उपयोग करता हूं, .NET 4.5 – AmirhosseinYari

3

नोटिस दें कि लेख कि dowski और Panos (MSDN Win32_Printer) को रेफरिंग कर रहा था थोड़ा भ्रामक हो सकता है।

मैं अधिकांश सरणी के पहले मूल्य का जिक्र कर रहा हूं। कुछ 1 के साथ शुरू होता है और कुछ 0. उदाहरण के लिए साथ शुरू होता है, "ExtendedPrinterStatus" तालिका में पहला मान 1 है इसलिए, आपके सरणी कुछ इस तरह होना चाहिए:

string[] arrExtendedPrinterStatus = { 
    "","Other", "Unknown", "Idle", "Printing", "Warming Up", 
    "Stopped Printing", "Offline", "Paused", "Error", "Busy", 
    "Not Available", "Waiting", "Processing", "Initialization", 
    "Power Save", "Pending Deletion", "I/O Active", "Manual Feed" 
}; 

और दूसरे हाथ पर, " ErrorState "तालिका में पहले मान 0 इसलिए, आपके सरणी कुछ इस तरह होना चाहिए,:

string[] arrErrorState = { 
    "Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner", 
    "No Toner", "Door Open", "Jammed", "Offline", "Service Requested", 
    "Output Bin Full" 
}; 

Btw, " PrinterState "अप्रचलित है, लेकिन आप कर सकते हैं "प्रिंटरस्टैटस" का उपयोग करें।

2

बस संदर्भ के लिए, here प्रिंटर प्रबंधनऑब्जेक्ट के लिए सभी उपलब्ध गुणों की एक सूची है।

usage: printer.Properties["PropName"].Value 
0

डब्लूएमआई के विकल्प के रूप में आप WinSpool.drv में टैप करके तेजी से सटीक परिणाम प्राप्त कर सकते हैं (यानी।Windows API) - आप इंटरफेस, structs pinvoke.net से & स्थिरांक पर सभी जानकारी प्राप्त कर सकते हैं, या मैं http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html

2

पर कोड डाल दिया है एक साथ मैं जानता हूँ कि यह एक पुरानी पोस्ट कर रहा है, लेकिन आजकल आसान/तेज विकल्प WPF ढांचे (गैर-WPF ऐप्स द्वारा उपयोग योग्य) द्वारा प्रदान की गई उन्नत मुद्रण सेवाओं का उपयोग करना है।

http://msdn.microsoft.com/en-us/library/System.Printing(v=vs.110).aspx

एक उदाहरण प्रिंटर कतार और पहले कार्य की स्थिति को पुनः प्राप्त करने ..

var queue = new LocalPrintServer().GetPrintQueue("Printer Name"); 
var queueStatus = queue.QueueStatus; 
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus 
+0

दोनों स्थानीयप्रिंटसेवर और GetPrintQueue से लौटाई गई कतार IDISposable हैं, इसलिए आपको इसे वास्तव में उपयोग करने वाले कॉल में लपेटना चाहिए। का उपयोग करते हुए (वर LPS = नए LocalPrintServer()) { का उपयोग कर (वर कतार = lps.GetPrintQueue (printerName)) { वर queueStatus = queue.QueueStatus; var jobStatus = queue.GetPrintJobInfoCollection()। FirstOrDefault()। जॉबस्टैटस; } } – crunchy