2012-08-24 16 views
6

यहाँ में संपत्ति हम क्या करने की कोशिश कर रहे क्या विंडोज एक्सपी विशेष रूप से) और इसे हमें भेज रहा है, और हमने फैसला किया है कि ऐसा करने का सबसे अच्छा तरीका एसी # ऐप बनाना है जो हमें अपनी स्पूल फाइल भेजता है, जिसे हम पहले ही आसानी से पार्स कर सकते हैं।सेटिंग प्रिंटर "KeepPrintedDocuments" .NET

बहरहाल, यह सच करने के लिए "सभी मुद्रित दस्तावेज़ों रखें" की स्थापना की आवश्यकता है। हम इसे निम्नलिखित कारणों से मैन्युअल रूप से हमारे ऐप में करना चाहते हैं: हमारे ग्राहकों के कुछ (सैकड़ों) एक बेहतर शब्द की कमी के लिए हैं, गूंगा। हम उन्हें नियंत्रण कक्ष में गड़बड़ी करने के लिए मजबूर नहीं करना चाहते हैं ... हमारे तकनीकी सहायता लोग जितना व्यस्त हैं उतने व्यस्त हैं।

यहाँ जहां मैं एक समस्या हुई है:

string searchQuery = "SELECT * FROM Win32_Printer"; 
ManagementObjectSearcher searchPrinters = new ManagementObjectSearcher(searchQuery); 
ManagementObjectCollection printerCollection = searchPrinters.Get(); 


foreach (ManagementObject printer in printerCollection) 
{ 
    PropertyDataCollection printerProperties = printer.Properties; 
    foreach (PropertyData property in printerProperties) 
    { 
     if (property.Name == "KeepPrintedJobs") 
     { 
      printerProperties[property.Name].Value = true; 
     } 
    } 
} 

यह, जहाँ तक मैं WMI अनुसंधान के कई घंटे से बता सकते हैं, सच करने के लिए प्रत्येक प्रिंटर के KeepPrintedJobs संपत्ति स्थापित करना चाहिए ... लेकिन यह काम नहीं कर रहा है। जैसे ही फ़ोरैच लूप समाप्त होता है, KeepPrintedJobs को वापस झूठ पर सेट किया जाता है। हम WMI का उपयोग करना पसंद करेंगे और रजिस्ट्री में गड़बड़ नहीं करेंगे, लेकिन मैं हमेशा इस काम को करने की कोशिश नहीं कर सकता। क्या गुम है पर कोई विचार?

+0

किसी को इसके बारे में कुछ भी पता है? हम इसके बजाए एक छोटी रजिस्ट्री हैक के साथ आगे बढ़े हैं, लेकिन हम अभी भी जानना चाहते हैं कि यह संभव है या नहीं। –

+1

क्या आपने इसे देखा है: http://msdn.microsoft.com/en-us/library/w09tfy94.aspx? ऐसा लगता है कि आपको परिवर्तन (ओं) को स्पष्ट रूप से प्रतिबद्ध करने के लिए 'पुट()' के अधिभारों में से एक को कॉल करना होगा। –

+0

* माथे slaps * मूर्ख, ज़ाहिर है, धन्यवाद आदमी। रेग हैक गंदा महसूस करते हैं। –

उत्तर

3

ManagementObject पर Put() के लिए एक कॉल जोड़ने स्पष्ट रूप से परिवर्तन लागू करने के लिए, इस तरह का प्रयास करें:

foreach (ManagementObject printer in printerCollection) 
{ 
    PropertyDataCollection printerProperties = printer.Properties; 
    foreach (PropertyData property in printerProperties) 
    { 
     if (property.Name == "KeepPrintedJobs") 
     { 
      printerProperties[property.Name].Value = true; 
     } 
    } 
    printer.Put(); 
} 

आशा है कि मदद करता है।

+0

हम पहले से ही हमारे एक्सपी ग्राहक को जारी कर चुके हैं, जिनमें से कई XPe का उपयोग करते हैं, इसलिए हमें रजिस्ट्री विधि का उपयोग करना होगा क्योंकि हमें पहले .NET संस्करणों को लक्षित करना होगा। हालांकि यह निकट भविष्य में हमारे लिए उपयोगी होगा, इसलिए धन्यवाद! –

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