2011-02-09 17 views
5

हमें हमारे स्कूल प्रोजेक्ट के लिए एक शब्द उदाहरण शुरू करने और दस्तावेज़ बंद होने पर ट्रैक करने का एक तरीका चाहिए। शब्द से COM api के लिए कोई घटना नहीं है, क्या ऐसा करने के कोई अन्य तरीके हैं?दस्तावेज़ प्रारंभ करें और मॉनिटर करें यदि दस्तावेज़

वर्तमान में हम शब्द से COM api का उपयोग कर रहे हैं, लेकिन बाकी सब कुछ ठीक होगा। हम सी # में प्रोग्रामिंग कर रहे हैं।

+0

इस में मदद मिलेगी की Process.MainWindowTitle

हुक से बाहर निकल गया घटना का उपयोग कर विशेष फ़ाइल की प्रक्रिया को पहचानें? http://stackoverflow.com/questions/4329521/how-to-handle-word-close-event-from-winforms- appplication – Koen

+1

हमने यह भी कोशिश की, लेकिन हमने देखा कि क्या पहले से ही एक शब्द proc हमारी नई proc में विलय हो गया था चल रहा है। हम एक पूर्वावलोकन भी होस्ट करते हैं इसलिए हमेशा एक शब्द प्रक्रिया होती है। – MBulli

उत्तर

2

अपने Microsoft.Office.Interop.Word पुस्तकालय एक घटना आप भी सदस्यता ले सकते हैं है का उपयोग कर:

Microsoft.Office.Interop.Word.Application wordApp = 
    new Microsoft.Office.Interop.Word.Application(); 
wordApp.DocumentBeforeClose += 
    new ApplicationEvents4_DocumentBeforeCloseEventHandler(
     wordApp_DocumentBeforeClose); 

...

private void wordApp_DocumentBeforeClose(Document Doc, ref bool Cancel) 
{ 
    // Do your thing 
} 

संपादित करें:

फ़ाइल लॉक का ख्याल रखने के लिए ==>this post पर एक नज़र डालें। जैसा कि आप देख सकते हैं कि DocumentBeforeClose में कुछ चीजें हैं:

  1. जांचें कि दस्तावेज़ सहेजा गया है या नहीं। यदि नहीं ==> पूछें कि इसे कहां से सहेजना है और इसे स्वयं करें।
  2. दस्तावेज़ खुद
  3. बंद वर्ड

इन बातों के बाद का ध्यान रखा जाता बंद करो, तुम अपना सामान कर सकते हैं। लॉक जारी किया जाना चाहिए।

+0

लेकिन हमें आफ्टरक्लोज्ड के लिए एक ईवेंट की आवश्यकता है, हमने इसे पहले सेव के साथ एसिंक के साथ किया था जबकि लूप चेकइन डॉक्टर। सहेजे गए == सच थे लेकिन हमें पहले से कुछ भी नहीं मिला था – MBulli

+0

और दस्तावेज़ के बारे में आपको यह जानने के बाद क्या करना है बंद हो गया है? – Koen

+0

डॉक्टर के सभी बाइट पढ़ें और इसे एक डीबी में डालें। समस्या यह है कि शब्द खुले होने पर फ़ाइल लॉक रखता है। – MBulli

2

यह देखने के लिए विद्वान प्रक्रिया का उपयोग करें कि क्या कण फ़ाइल पर चल रही प्रक्रिया बाहर है या नहीं।

यदि आप नहीं जानते कि नए प्रारंभिक उदाहरण की प्रक्रिया इस प्रक्रिया का उपयोग करती है या बस प्रक्रिया की पुरानी घटना को हुक करती है।

जाओ सभी शब्द प्रक्रियाओं

var info = Process.GetProcessesByName("winword").FirstOrDefault(); 

प्रक्रिया Process.Exited

+0

ठीक है यह काम करना चाहिए, लेकिन क्या होगा यदि उपयोगकर्ता शब्द में एक नया दस्तावेज़ बनाता है? – MBulli

+0

कोई फर्क नहीं पड़ता कि किसने बनाई प्रक्रिया की। GetProcessByName का उपयोग करके आपको हमेशा प्रक्रिया मिल जाएगी। यदि आप किसी भी विशिष्ट उदाहरण की निगरानी करना चाहते हैं, तो आप मेनविंडो टाइटल का उपयोग कर सकते हैं। – hungryMind

+0

लेकिन यदि उपयोगकर्ता एक नया दस्तावेज़ बनाता है तो मेनविंडो टिटल नए दस्तावेज़ का शीर्षक है, लेकिन मुझे नहीं पता कि मेरा दस्तावेज़ अभी भी खुला है या नहीं। शब्द भी प्रक्रिया को विलीन कर देता है, इसलिए यदि मेरे पास पहले से ही शब्द का चल रहा उदाहरण है और एक नया प्रारंभ है, तो नया तुरंत बाहर निकल जाएगा, इसलिए 'प्रक्रिया। संपादित' घटना काम नहीं करती है – MBulli