2011-06-27 4 views
6

मैं एप्लिकेशन शुरू करने के लिए ShellExecuteEx का उपयोग कर रहा हूं। प्रारंभिक प्रक्रिया के संभाल प्राप्त करने के लिए सफल शुरुआत के बाद TShellExecuteInfo.hProcess पढ़ रहा हूं।यह जांचने के लिए कि किसी दिए गए प्रक्रिया को उसके हैंडल होने पर चल रहा है

मैं समय-समय पर जांच करना चाहता हूं कि मेरे आवेदन द्वारा शुरू की गई प्रक्रिया अभी भी चल रही है या नहीं। एक ही नाम के साथ दो या दो से अधिक प्रक्रियाएं एक साथ चल सकती हैं और मैं यह सुनिश्चित करना चाहता हूं कि मेरा एप्लिकेशन सही प्रक्रिया की जांच कर रहा है।

मैं विंडोज 2000 से ऊपर विंडोज सिस्टम पर ऐसा करने में सक्षम होना चाहता हूं।

मुझे पता है कि वहाँ WinAPI समारोह GetProcessId जो कर रहा है मैं वास्तव में क्या चाहते हैं, लेकिन इसका समर्थन नहीं करता विंडोज़ 2000

अपने जवाब के लिए धन्यवाद।

+0

चूंकि आपके पास प्रक्रिया के लिए हैंडल है, इसलिए मुझे नहीं पता कि आपका क्या मतलब है "मैं यह सुनिश्चित करना चाहता हूं कि मेरा एप्लिकेशन सही प्रक्रिया की जांच कर रहा है"। यह सही प्रक्रिया क्यों नहीं हो सकती है क्योंकि आपके पास पहले से हैंडल है? –

+0

@ डेविड मुझे लगा कि मुझे अपनी आवश्यकता पर जोर देने की जरूरत है, अगर कोई मुझे इस तरह का समाधान सुझा सकता है: http://www.delphitricks.com/source-code/windows/check_if_a_process_is_running.html – Wodzu

उत्तर

14

उस हैंडल पर WaitForSingleObject पर कॉल करें, और शून्य के टाइमआउट पैरामीटर का उपयोग करें। अगर प्रक्रिया अभी भी चल रही है, तो फ़ंक्शन Wait_Timeout लौटाएगा; यदि प्रक्रिया समाप्त कर दिया है, तो यह Wait_Object_0 (क्योंकि प्रक्रिया समाप्ति संकेत बनने के लिए अपने हैंडल कारण बनता है।) वापस आ जाएगी

आप को पता है कि इस प्रक्रिया के निकास स्थिति है, तो GetExitCodeProcess फोन चाहते हैं।

+0

आप केवल 'GetExitCodeProcess' को कॉल कर सकते हैं 'वापसी मूल्य फिर से 'STILL_ACTIVE' का परीक्षण करें। –

+1

जब तक बाहर निकलने वाला कोड * * 'Still_Active', @ डेविड नहीं है। फिर आपको अभी भी अंतर करने के लिए किसी अन्य तरीके की आवश्यकता है, और यदि आप वास्तव में * देखभाल * नहीं करते हैं * निकास कोड क्या है, तो बस 'WaitForSingleObject' को भी कॉल कर सकते हैं। –

+0

मदद के लिए बहुत बहुत धन्यवाद :) – Wodzu

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