2012-02-23 44 views
5

मैं टमाज़ी के फ्यूचरविंडोज़ इंफ्रास्ट्रक्चर का उपयोग करने की कोशिश कर रहा हूं (Delphi GUI Testing and Modal Forms पर अपने उत्तर को देखें या https://github.com/tomazy/DelphiUtils पर टूल का घर देखें), लेकिन यह जानना चाहेंगे कि मानक विंडोज फ़ाइल खुले संवादों के साथ इसका उपयोग कैसे किया जा सकता है? उन्हें टीकंट्रोल से विरासत में प्रतीत नहीं होता है, जो भविष्यवाणियों का इन्फ्रा लगता है (जब तक कि मैंने इसे गलत समझा नहीं है)।(कैसे) मैं मानक फ़ाइल खुले संवाद के साथ भविष्यवाणियों का उपयोग कर सकता हूं?

मैं जो करना चाहता हूं वह मूल रूप से एक ओपनफाइलडिअलॉग में एक फ़ाइल का चयन करने के लिए है जो मेरे परीक्षण के भीतर एक कमांड द्वारा सामान्य रूप से खोला जाता है, लेकिन अभी तक यह पता लगाने में सक्षम नहीं है कि यह कैसे किया जाए।

उत्तर

4

विंडो क्लास नाम क्या है यह जानने के लिए Spy++ जैसे टूल का उपयोग करें। उदाहरण के लिए, मेरी विंडोज 7 मशीन पर, सिस्टम फ़ाइल खोलने के लिए विंडो क्लास नाम #32770 (Dialog) है।

+0

धन्यवाद, मैंने वास्तव में नोट किया कि भविष्यवाणियों के पास यह एक कॉन्स (MESSAGE_BOX_WINDOW_CLASS) है और इस प्रकार मुझे एक IWindow (भविष्यविंडोज इंटरफ़ेस) के रूप में संवाद तक पहुंच मिली। अब मेरी समस्या यह है कि इस इंटरफ़ेस को ऑब्जेक्ट करने के लिए, क्योंकि इंटरफ़ेस केवल एक AsControl विधि प्रदान करता है, जो मुझे संदेह करेगा कि संवाद एक टीकंट्रोल नहीं है। इसके बिना, मुझे नहीं पता (अभी तक) संवाद की फ़ाइल नाम संपत्ति को कैसे सेट करें ... – DelphiUser

+0

आप सही हैं, 'AsControl' काम नहीं कर सकता है। लक्ष्य विंडो का शिकार करने के लिए आप 'EnumChildWindows' का उपयोग कर सकते हैं, लेकिन एक आसान तरीका हो सकता है। क्या आप इसका नकल नहीं कर सकते? –

+0

मैं थोड़ी देर के लिए googled और इसके साथ समाप्त हुआ, जो काम करता प्रतीत होता है: विंडोज.SetDlgItemText (DlgHandle, 1148, पीसीहर (फ़ाइल नाम)); इसका उपयोग: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/62d5db14-5497-4ceb-8af0-d7f81732e937/ तो मूल रूप से मैं फ़ाइल नाम को सही नियंत्रण में सेट करने के लिए एक संदेश भेजता हूं (आईडी 1148 कम से कम मेरे विंडोज 7 पर काम करता है :)) – DelphiUser

3

मेरे वर्तमान समाधान के नीचे है:

TFutureWindows.Expect(MESSAGE_BOX_WINDOW_CLASS) 
    .ExecProc(
    procedure (const AWindow: IWindow) 
    var 
     DlgHandle: HWND; 
     FileName: string; 
    begin 
     FileName := ExpandFileName('myFileToUse.txt'); 
     DlgHandle := AWindow.GetHandle; 
     Windows.SetDlgItemText(DlgHandle, 1148, PChar(FileName)); 
    end 
    ) 
    .ExecSendKey(VK_RETURN); 

तो मूल रूप से एक संदेश विंडोज एपीआई का उपयोग कर भेज दिया। विचार (और आईडी 1148) यहां से मिले थे: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/62d5db14-5497-4ceb-8af0-d7f81732e937/

संभावित बेहतर समाधान स्वागत है, लेकिन यह मेरे लिए कम से कम ठीक लगता है। अब तक टिप्पणियों के लिए धन्यवाद!

+0

मैं नहीं देख सकता कि आपको इससे बेहतर समाधान मिलेगा। –

+0

यह (वर्तमान में) अंतिम वास्तविक समाधान का सारांश है, लेकिन मैंने एक सहायक दिशा की ओर इशारा करते हुए मदद की पहचान प्रदान करने के उत्तर के रूप में उपरोक्त @ डेविड हेफरन का उत्तर चिह्नित किया है। – DelphiUser