تطبيق موفر التنفيذ التلقائي لواجهة المستخدم من جانب الخادم

ملاحظةملاحظة

Th هو الوثائق هو المقصودة لإطار عمل.NET المطورين الذين يرغبون في استخدام المدارة UI Automationالفئات المعرفة في System.Windows.Automationمساحة الاسم.للحصول على أحدث المعلومات حول UI Automation، راجع API التنفيذ التلقائي Windows: أتمتة واجه المستخدم.

يصف هذا القسم كيفية تنفيذ على جانب الملقم "التنفيذ التلقائي لواجهة مستخدم" موفر المخصص عنصر تحكم.

التطبيق ل Windows Presentation Foundation (WPF)عناصر وغير- WPFالعناصر (مثل تلك التي تم تصميمها ل Windows Forms) هو تكنولوجية مختلفة. WPFتوفر العناصر دعم لUI Automationمن خلال فئة مشتقة منAutomationPeer. بلا- WPFتوفر عناصر دعم من خلال عمليات تطبيق موفر واجهات.

يشتمل هذا الموضوع على الأقسام التالية.

  • اعتبارات الأمان
  • تطبيق موفر بعناصر البنية الأساسية لبرامج العروض التقديمية Windows
  • موفر التنفيذ بغير-WPF عناصر
  • موضوعات ذات صلة

اعتبارات الأمان

يجب أن تتم كتابة الموفرين حيث يمكنك العمل جزئي-بيئة الثقة. لأنه لم يتم تكوين UIAutomationClient.dll لتعمل تحت الثقة جزئي، الخاص بك موفر يجب أن لا تشير التعليمة البرمجية إلى هذا تجميع. إذا أدى ذلك، تعليمات برمجية قد تشغيلها في بيئة الثقة كاملة ولكن ثم تفشل في بيئة الثقة جزئيا.

وعلى وجه الخصوص، لا تقم باستخدام حقول من clكـses في UIAutomationClient.dll مثل كـ في AutomationElement. بدلاً من ذلك، استخدم حقول المكافئة من clكـses في UIAutomationTypes.dll، مثل AutomationElementIdentifiers.

تطبيق موفر بعناصر البنية الأساسية لبرامج العروض التقديمية Windows

للحصول تشغيل مزيد من المعلومات حول هذا الموضوع، الرجاء مراجعة التنفيذ التلقائي واجهة المستخدم لأحد عناصر التحكم المخصصة لـ WPF.

موفر التنفيذ بغير-WPF عناصر

عناصر التحكم المخصصة التي ليست جزءا من WPFإطار عمل، ولكن التي تتم كتابتها في تعليمات برمجية مُدارة (غالباً هذه Windows Formsعناصر التحكم)، توفر دعم ل UI Automationبتنفيذ واجهات. يجب تطبيق كل عنصر واحد على الأقل من الواجهات المسرودة في الجدول أول في مقطع التالي. بالإضافة إلى ذلك، إذا كان يعتمد العنصر واحد أو المزيد نمط عنصر التحكم s ، يجب أن يقوم تطبيق الواجهة المناسبة لكل نمط عنصر التحكم.

الخاص بك UI Automationيجب أن مرجع مشروع موفر تجميعات التالية:

  • UIAutomationProviders.dll

  • UIAutomationTypes.dll

  • WindowsBase.dll

يشتمل هذا القسم على الأقسام الفرعية التالية.

  • موفر الواجهات
  • متطلبات لموفري غير WPF
  • قيم خاصية في الموفرون غير WPF
  • أحداث في الموفرون غير WPF
  • موفر غير WPF التنقل
  • موفر غير WPF Reparenting
  • موفر غير WPF إعادة تعيين موضعها

موفر الواجهات

كل UI Automationيجب أن يقوم تطبيق موفر واحد من الواجهات التالية.

الواجهة

الوصف

IRawElementProviderSimple

يوفر وظائف بسيط عنصر تحكم التي تتم استضافتها في نافذة، بما في ذلك دعم عنصر تحكم الأنماط والخصائص.

IRawElementProviderFragment

الموروثة من IRawElementProviderSimple. إضافة وظائف لعنصر في مركب عنصر تحكم التنقل ضمن الجزء بما في ذلك، تعيين تركيز وإرجاع إحاطة مستطيل التحديد الخاص بالعنصر.

IRawElementProviderFragmentRoot

الموروثة من IRawElementProviderFragment. إضافة وظائف للعنصر الجذر في عنصر تحكم معقدة، بما في ذلك تحديد موقع عنصر فرع في الإحداثيات المحددة و تعيين الولاية تركيز لعنصر التحكم بالكامل.

واجهات التالية توفر الوظيفة الإضافية ولكنها ليست مطلوبة إلى تطبيقه.

الواجهة

الوصف

IRawElementProviderAdviseEvents

قم بتمكين الموفر إلى تتبع الطلبات الخاصة بالأحداث.

IRawElementProviderHwndOverride

تمكين إعادة تعيين موضعها من يستند إلى نافذة عناصر داخل UI Automationشجرة من الجزء .

الجميع الواجهات الأخرى في System.Windows.Automation.Providerمساحة الاسم من أجل عنصر تحكم نقش دعم .

متطلبات لموفري غير WPF

للاتصال بواسطة UI Automation، الخاصة بك عنصر تحكم يجب أن تقوم بتنفيذ النواحي الرئيسية التالية لوظيفة:

الوظائف

التنفيذ

كشف الموفر إلى UI Automation

ردا على رسالة WM_GETOBJECT إلى عنصر تحكم النافذة، إرجاع الكائن الذي يطبق IRawElementProviderSimple(أو a derived واجهة). ل الأجزاء ، يجب أن يكون موفر الجزء الجذر.

توفر قيم الخاصية

تطبيق GetPropertyValueإلى توفير أو تتجاوز قيم.

تمكين عميل للتعامل مع عنصر تحكم

قم بتطبيق الواجهات التي تدعم النقوش التحكم ، مثل IInvokeProvider. ترجع هذه نقش موفري في التطبيق الخاص بك ل GetPatternProvider.

رفع أحداث

الاتصال بأحد الأساليب الثابتة ل AutomationInteropProviderلرفع حدث الذي يمكن لعميل انصات for.

تمكين التنقل و التركيز داخل الأجزاء

قم بتطبيق IRawElementProviderFragmentلكل عنصر في الجزء. (غير ضرورية ل عناصر التي ليست جزء من جزء.)

تمكين التركيز وموقع عنصر فرع في الأجزاء

التطبيق IRawElementProviderFragmentRoot (غير ضرورية ل عناصر التي ليست جزء الجذور.)

قيم خاصية في الموفرون غير WPF

UI Automationيجب أن يعتمد موفر لعناصر التحكم المخصصة بعض خصائص التي يمكن أن يتم استخدام النظام أتمتة وكذلك بواسطة تطبيقات العميل. للعناصر التي يتم استضافتها في الإطارات (HWNDs) UI Automationيمكن استرداد بعض خصائص من الموفر الافتراضي للإطار، ولكن يجب أن تحصل على الآخرين من موفر مخصص.

موفري HWND المستندة إلى عناصر التحكم لا تحتاج عادة إلى توفير الخصائص التالية (المعرفة بواسطة قيم حقول):

ملاحظةملاحظة

RuntimeIdPropertyالجذر عنصر أو جزء بسيط استضافتها في نافذة هو الحصول عليها من النافذة؛ ومع ذلك، يجب أن يوفر عناصر جزء تحت الجذر (على سبيل المثال، lهوt عناصر في صندوق lهوt) المعرفات الخاصة بها.لمزيد من المعلومات، راجع GetRuntimeId.

IsKeyboardFocusablePropertyيجب إرجاع عن موفري استضافة في Windows Formsعنصر تحكم.في هذه الحالة، قد يتمكن الموفر الافتراضي للإطار إلى استرداد القيمة الصحيحة.

NamePropertyهو عادة ما يتم توفيره من قبل موفر مضيف.على سبيل المثال، إذا كان عنصر تحكم مخصص هو مشتقة من Control، الاسم هو مشتق من Textخاصية لعنصر التحكم.

ل مثال تعليمات برمجية، راجع إرجاع الخصائص من واجه المستخدم أتمتة موفر.

أحداث في الموفرون غير WPF

UI Automationيجب رفع موفري أحداث إلى إعلام تطبيقات العميل من التغييرات في الولاية عدم إظهار مربعات الحوار. يتم استخدام الأساليب التالية إلى رفع أحداث.

Method

الوصف

RaiseAutomationEvent

رفع الأحداث المتنوع، بما في ذلك الأحداث المشغلة بواسطة عنصر تحكم النقوش.

RaiseAutomationPropertyChangedEvent

تشغيل حدث عند UI Automationخاصية تم تغييره.

RaiseStructureChangedEvent

رفع حدث عند البنية UI Automationتغير شجرة؛ ل مثال، بواسطة إزالة أو إضافة على العنصر.

الهدف من الحدث هو لإعلام العميل شيء ما بأخذ مكان في واجهة المستخدم (UI)، أو عدم نشاط هو المشغلة بواسطة UI Automationالنظام نفسه. على سبيل المثال، حدث المعرف بواسطة InvokedEventيجب أن يكون raهوed كلما عنصر التحكم هو باستدعاء، أما عن طريق إدخال مستخدم المباشر أو عن طريق الاتصال تطبيق العميل Invoke.

لتحسين الأداء، موفر يمكن اختيارياً الأحداث raهوe أو raهوe أية أحداث في كل حالة لا تطبيق العميل هو regهوtered تلقيها. يتم استخدام الأساليب التالية للحصول على الأمثلية.

Method

الوصف

ClientsAreListening

تحدد هذه خاصية ثابتة ما إذا كانت أية تطبيقات العميل اشتركت إلى UI Automationالأحداث.

IRawElementProviderAdviseEvents

يمكن تطبيق الموفر لهذه الواجهة تشغيل جذر جزء من إلى أخذ العلم عند تسجيل العملاء وإلغاء تسجيل معالجات الأحداث للأحداث تشغيل الجزء .

موفر غير WPF التنقل

يتحكم الموفرين للبسيطة مثل كـ زر مخصص التي تتم استضافتها في نافذة (HWND) لا تحتاج إلى دعم التنقل داخل UI Automationشجرة. التنقل من العنصر هو التي تمت معالجتها بواسطة الموفر الافتراضي للإطار مضيف، الذي هو المحدد في التطبيق HostRawElementProvider. عند تطبيق أحد موفرات المخصص معقدة عنصر تحكم، على الرغم من ذلك، يجب أن يدعم التنقل بين عقدة جذر الجزء والتوابع الخاصة به، وبين عقد مشابهة.

ملاحظةملاحظة

عناصر جزء غير ذلك من أن ترجع الجذر على nullمرجع من HostRawElementProvider، لأن أنها تكون غير مباشرة استضافة في نافذة، ويمكن أن الموفر الافتراضي لا يعتمد التنقل ومنها.

بنية الجزء هو تحديد بواسطة التطبيق الخاص بك ل Navigate. لكل اتجاه المحتملة من كل جزء، وهذا أسلوب إرجاع الكائن الموفر للعنصر في هذا الاتجاه. إذا كان هناك هو لا يوجد عنصر في هذا الاتجاه، إرجاع الأسلوب nullالمرجع.

يدعم الجذر جزء التنقل فقط إلى العناصر التابعة. على سبيل المثال، صندوق lهوt بإرجاع عنصر أول في lهوt عند $ $ $ $ اتجاه هو FirstChild، وعنصر آخر عند هو اتجاه LastChild. لا يعتمد الجذر جزء التنقل للوالد أو بين العناصر المشابهة؛ th هو هو معالجتها بواسطة موفر الإطار مضيف.

يجب أن تدعم عناصر غير الجذر من جزء التنقل إلى الأصل، و إلى أي بين العناصر المشابهة والأطفال لديهم.

موفر غير WPF Reparenting

الإطارات المنبثقة هي إطارات ذات المستوى لأعلى بالفعل وذلك بشكل افتراضي يظهر في UI Automationشجرة كـ الأطفال لسطح المكتب. في كثير من الحالات، على الرغم من ذلك، الإطارات المنبثقة هي منطقياً الأطفال بعض البعض عنصر تحكم. على سبيل المثال، lهوt قائمة منسدلة مربع التحرير والسرد هو منطقياً فرع لمربع التحرير والسرد. وبشكل مماثل، قائمة نافذةا منبثقًا هو منطقياً فرعا للقائمة. UI Automationتوفير الدعم reparent Pop بحيث تظهر أن توابع المقترنة عنصر تحكم.

إلى reparent النافذةات المنبثقة-لأعلى النافذة:

  1. إنشاء موفر للإطارات المنبثقة-لأعلى الإطار. Th هو يتطلب أن فئة الإطار المنبثق هو تعرف مقدما.

  2. تنفيذ الجميع النقوش والخصائص كالمعتاد لهذه الإطارات المنبثقة-لأعلى، كما لو كان عنصر تحكم في الجهة اليمنى الخاصة به.

  3. قم بتطبيق HostRawElementProviderالخاصية الموقع أنه بإرجاع القيمة التي تم الحصول عليها من HostProviderFromHandle، الموقع معلمة هو مؤشر الإطار لإطار منبثق.

  4. تطبيق Navigateللإطار المنبثق والأصل حيث التنقل هو التي تمت معالجتها بشكل صحيح من الأصل منطقية للأطفال المنطقية، وبين الأطفال المشابهة.

عند UI Automationمصادفة نافذة منبثق، يتعرف عليها أن التنقل هو تجاوز من الافتراضي، ويتجاوز عبر نافذة منبثق عند ذلك هو مصادفة كتابع لسطح المكتب. بدلاً من ذلك، سوف تكون العقدة فقط قابلة للوصول من خلال الجزء.

reparenting غير مناسبة للحالات الموقع يمكن لعنصر تحكم مضيف إطارا لأي فئة. على سبيل المثال، يمكن أن يستضيف شريط فرعي أي نوع من HWND في الشرائط الخاصة به. إلى معالجة هذه الحالات، UI Automationيعتمد نموذج بديل لإعادة تحديد موقع HWND، كما هو موضح في مقطع التالي.

موفر غير WPF إعادة تعيين موضعها

UI Automation fragments may contain two or more elements that are each contained in a window (HWND). لأن كل HWND الموفر الافتراضي الخاصة بها التي يعتبرها HWND إلى يكون تابعا ل HWND يحتوي على UI Automationشجرة، بشكل افتراضي، تظهر HWNDs في الجزء كتوابع للإطار الأصل. هذا هو سلوك مطلوباً في معظم الحالات، ولكن في بعض الأحيان فإنه يمكن أن يؤدي إلى الفوضى لأن لا يطابق بنية منطقية واجهة المستخدم.

مثال جيد لترتيب هو هو عنصر تحكم شريط فرعي. شريط فرعي تحتوي على شرائط، كل منها يمكن أن تحتوي بدورها على HWND المستندة إلى عنصر تحكم مثل شريط أدوات أو صندوق تحرير أو صندوق التحرير والسرد. الموفر الافتراضي للإطار ل شريط فرعي HWND يرى عنصر تحكم شريط HWNDs كـ الأطفال، ويقوم موفر شريط فرعي يرى الشرائط كـ الأطفال. لأن العمل بالترادف الموفر HWND وموفر شريط فرعي وضم أطفالهم، والشرائط HWND يستند عناصر التحكم تظهر كتوابع شريط فرعي. منطقياً، على الرغم من ذلك، يجب أن يظهر فقط الشرائط كتوابع شريط فرعي، ويجب أن يكون بدقة كل موفر الشريط باستخدام موفر HWND الافتراضي عنصر تحكم يحتويها.

إلى تنفيذ ذلك، موفر الجزء الجذر شريط فرعي الكشف عن التعيين من الأطفال التي تمثل الشرائط. كل بث لدى موفر مفرد التي قد تكشف خصائص وأنماط. في التطبيق الخاص به من HostRawElementProvider، ترجع الموفر بث موفر الإطار الافتراضي عنصر تحكم HWND، حيث أنه يحصل على بواسطة استدعاء HostProviderFromHandle، تمرير في إطار عنصر تحكم's مؤشر. وأخيراً، يطبق موفر الجذر جزء شريط فرعي IRawElementProviderHwndOverrideالواجهة، وفي التنفيذ الخاص به من GetOverrideProviderForHwndترجع موفر النطاق المناسب عنصر تحكم في HWND المحدد.

راجع أيضًا:

المهام

كشف جانب الخادم واجه المستخدم أتمتة موفر

إرجاع الخصائص من واجه المستخدم أتمتة موفر

رفع الأحداث من واجه المستخدم أتمتة موفر

تمكين التنقل في التنفيذ التلقائي واجه المستخدم موفر التجزئة

يعتمد عنصر تحكم نقش في موفر التنفيذ تلقائي واجهة المستخدم

نموذج موفر بسيطة

نموذج موفر التجزئة

المبادئ

واجه المستخدم أتمتة نظرة عامة حول موفري