2011-08-30 5 views
5

मेरे पास मेरे फॉर्म पर एक ट्री व्यू नियंत्रण है, और मैं खिड़की से शुरू होने वाली दूसरी विंडो के तत्वों के माध्यम से पुनरावर्ती रूप से जा रहा हूं। मैं तत्वों खोजने के लिए इस का उपयोग कर रहा:विंडोज यूआई स्वचालन सभी बाल तत्वों को नहीं दिखा रहा है?

getRecursiveElements(AutomationElement parent) 
{ 
    children = parent.FindAll(TreeScope.Children, Condition.TrueCondition); 

    foreach (AutomationElement child in children) 
    { 
    addToTreeView(child); 
    getRecursiveElements(child); 
    } 
} 

सामान्य शब्दों में, कोड ज्यादातर मामलों में काफी अच्छी तरह से काम करता है। पेड़ आबादी है और मेरे पास थोड़ा सा समर्थन कोड है जो मुझे डबल क्लिक करने की इजाजत देता है, उदाहरण के लिए, पेड़-दृश्य में एक तत्व और यह उस तत्व को लक्ष्य रूप पर हाइलाइट करेगा।

मेरा मुद्दा यह है कि, यह एक अद्भुत पेड़ उत्पन्न करता है, फिर भी कुछ लक्ष्य कार्यक्रमों के लिए कुछ तत्व गायब हैं।

इसके लिए क्या संभव कारण हो सकता है, और क्या इसके आसपास जाने का कोई तरीका है? यदि मैं user32.dll से EnumChildWindows() पर कॉल करता हूं तो क्या वही समस्या होगी?

+2

क्या आप इस प्रकार के तत्वों के कुछ उदाहरण दे सकते हैं जो इसे छोड़ रहे हैं? और क्या आपने एसडीके से यूस्पी या इंस्पेक्ट टूल्स द्वारा उत्पादित एक के खिलाफ अपने पेड़ की तुलना की है? यूआईए में 'विचार' की अवधारणा है, जो एक फ़िल्टर है जिसे आप जिस स्थिति को ढूंढने के लिए आपूर्ति करते हैं उसके अतिरिक्त लागू होता है। डिफ़ॉल्ट रूप से, यूआईए उन चीजों को फ़िल्टर करता है जो सामग्री तत्व नहीं हैं, इसलिए यदि आप एक सूची बॉक्स या सूचीदृश्य की गणना करते हैं, तो आपको केवल सूची बॉक्स मिलेगा, लेकिन स्क्रॉलबार या हेडर नहीं। क्या यह ऐसी चीज है जिसे आप याद कर रहे हैं, या कुछ और? – BrendanMcK

उत्तर

3

सभी प्रोग्राम अपने सभी तार्किक बच्चों के लिए अलग-अलग विंडो वाले नियंत्रणों का उपयोग नहीं करते हैं। ज्यादातर यह इस्तेमाल जीयूआई ढांचे पर निर्भर करता है।

एक चरम उदाहरण के रूप में, क्यूटी प्रत्येक शीर्ष-स्तरीय विंडो के लिए एक एकल विंडो का उपयोग करता है। इसके बाद फ़ॉर्म के सभी WM_PAINT संदेश हैंडलर से फ़ॉर्म पर सभी विजेट चित्रित होते हैं।

इस दृष्टिकोण को लेने वाले कार्यक्रम आम तौर पर जेनेरिक तरीकों के माध्यम से स्वचालित करना असंभव हैं।

ऐसा लगता है कि आपको कुछ विंडो वाले नियंत्रणों का उपयोग करने वाले एप्लिकेशन का सामना करना पड़ा है, लेकिन एकाधिक विजेट होने के लिए एक विंडो के साथ कस्टम नियंत्रण भी उपयोग करता है। फिर यह काफी आम है।

+1

ओपी में: मुझे अभी भी यह कहने का एक उदाहरण चाहिए कि यह कहां विफल हो रहा है: एचडब्ल्यूएनडी का उपयोग नहीं करने वाले ऐप्स को या तो एमएसएए या यूआईयूयूटीमेशन को लागू करना है ताकि वे विकलांग लोगों द्वारा पहुंचा जा सकें - और टेस्टेबल भी समाप्त हो जाएं/automatable। उदाहरण के लिए, डब्ल्यूपीएफ, सिल्वरलाइट और फ्लैश और आईई और फ़ायरफ़ॉक्स के दस्तावेज़ क्षेत्र एचडब्ल्यूएनडी का उपयोग अपने बच्चों के तत्वों के लिए नहीं करते हैं, लेकिन क्योंकि वे इन इंटरफेस को लागू करते हैं, फिर भी आप उन्हें यूआईए के साथ समझा सकते हैं। मैं सोच रहा हूं कि 'कुछ निश्चित कार्यक्रम' क्या हैं, क्योंकि उनके पास पहुंच क्षमता भी हो सकती है; मैं उत्सुक हूं अगर ये जाने-माने ऐप्स हैं। – BrendanMcK

+2

(एफडब्ल्यूआईडब्लू, क्यूटी स्पष्ट रूप से एमएसएए लागू करता है - भले ही यह केवल एक एचडब्ल्यूएनडी का उपयोग करता है, फिर भी यह यूआईए का उपयोग करके समेकित होना चाहिए - चूंकि यूआईए एमएसएए का आंतरिक रूप से जानकारी के स्रोत के रूप में उपयोग करता है। क्या यूआई यूआईए के साथ गणित है या नहीं, चाहे वह बाल तत्वों के लिए एचडब्ल्यूएनडी का उपयोग करता हो; यह इस बात पर निर्भर भी हो सकता है कि ढांचे के पास पहुंच का समर्थन है या नहीं, और यदि यह है, तो ऐप के डेवलपर ने इसका सही ढंग से उपयोग किया है या नहीं।) – BrendanMcK

0

क्या आप विफल होने का एक बेहतर उदाहरण दे सकते हैं? समस्या के बारे में सोचते हुए, यह हो सकता है कि दूसरे रूप में 'तत्व' मैन्युअल रूप से खींचा जा रहा है, और इसलिए सबकुछ के लिए अलग-अलग पंजीकृत हैंडल नहीं हैं।

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