Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Feljegyzés
Ez a dokumentáció .NET-keretrendszer fejlesztőknek készült, akik a névtérben System.Windows.Automation meghatározott felügyelt UI-automatizálás osztályokat szeretnék használni. A UI-automatizálás kapcsolatos legfrissebb információkért lásd: Windows Automation API: UI-automatizálás.
Ez a szakasz azt ismerteti, hogyan implementálhat kiszolgálóoldali UI-automatizálás szolgáltatót egyéni vezérlőkhöz.
A Windows megjelenítési alaprendszer (WPF) és a nem WPF-elemek (például a Windows Formshoz tervezett) implementációja alapvetően eltér. A WPF-elemek támogatást nyújtanak a UI-automatizálás egy, a következőből származtatott osztályon AutomationPeerkeresztül. A nem WPF-elemek a szolgáltatói felületek implementációi révén nyújtanak támogatást.
Biztonsági szempontok
A szolgáltatókat meg kell írni, hogy részleges megbízhatósági környezetben működhessenek. Mivel UIAutomationClient.dll nincs konfigurálva részleges megbízhatósági futtatásra, a szolgáltatókód nem hivatkozhat erre a szerelvényre. Ha így tesz, előfordulhat, hogy a kód teljes megbízhatósági környezetben fut, de részleges megbízhatósági környezetben meghiúsul.
Különösen ne használjon olyan mezőket, amelyek a UIAutomationClient.dll osztályaiból AutomationElementszármaznak, például a . Ehelyett használja a UIAutomationTypes.dll osztályainak egyenértékű mezőit, például AutomationElementIdentifiers.
Szolgáltatói implementáció Windows megjelenítési alaprendszer elemek szerint
A témakörrel kapcsolatos további információkért tekintse meg a WPF egyéni vezérlőinek UI-automatizálás.
Szolgáltatói implementáció nem WPF-elemek szerint
Azok az egyéni vezérlők, amelyek nem részei a WPF-keretrendszernek, de felügyelt kódban vannak megírva (leggyakrabban Ezek a Windows Forms-vezérlők), interfészek implementálásával támogatják a UI-automatizálás. Minden elemnek végre kell hajtania a következő szakasz első táblázatában felsorolt felületek legalább egyikét. Emellett, ha az elem egy vagy több vezérlőmintát támogat, minden vezérlőmintához meg kell valósítania a megfelelő felületet.
A UI-automatizálás szolgáltatói projektnek a következő szerelvényekre kell hivatkoznia:
UIAutomationProviders.dll
UIAutomationTypes.dll
WindowsBase.dll
Szolgáltatói felületek
Minden UI-automatizálás szolgáltatónak az alábbi felületek egyikét kell implementálnia.
Interfész | Leírás |
---|---|
IRawElementProviderSimple | Egy ablakban üzemeltetett egyszerű vezérlő funkcióit biztosítja, beleértve a vezérlőminták és tulajdonságok támogatását is. |
IRawElementProviderFragment | Innen örököl: IRawElementProviderSimple. Egy összetett vezérlő egy elemének funkcióit adja hozzá, beleértve a töredéken belüli navigációt, a fókusz beállítását és az elem határoló téglalapjának visszaadását. |
IRawElementProviderFragmentRoot | Innen örököl: IRawElementProviderFragment. Egy összetett vezérlő gyökérelemének funkcióit adja hozzá, beleértve a gyermekelem meghatározott koordinátákon való helyét és a teljes vezérlő fókuszállapotának beállítását. |
A következő felületek további funkciókat biztosítanak, de nem szükséges implementálásuk.
Interfész | Leírás |
---|---|
IRawElementProviderAdviseEvents | Lehetővé teszi a szolgáltató számára az eseményekre vonatkozó kérések nyomon követését. |
IRawElementProviderHwndOverride | Lehetővé teszi az ablakalapú elemek áthelyezését egy töredék UI-automatizálás fáján belül. |
A névtérben lévő System.Windows.Automation.Provider összes többi adapter a vezérlőminta támogatásához használható.
Nem WPF-szolgáltatókra vonatkozó követelmények
A UI-automatizálás való kommunikációhoz a vezérlőnek a következő fő funkciókat kell megvalósítania:
Funkciók | Megvalósítás |
---|---|
A szolgáltató felfedése UI-automatizálás | A vezérlőablakba küldött WM_GETOBJECT üzenetre válaszul adja vissza a megvalósító IRawElementProviderSimple objektumot (vagy egy származtatott felületet). A töredékek esetében ennek kell lennie a töredékgyökér szolgáltatójának. |
Tulajdonságértékek megadása | Implementálás GetPropertyValue értékek megadásához vagy felülbírálásához. |
A vezérlővel való interakció engedélyezése az ügyfél számára | Olyan interfészek implementálása, amelyek támogatják a szabályozási mintákat, például IInvokeProvider. Adja vissza ezeket a mintaszolgáltatókat a implementációjában GetPatternProvider. |
Események emelése | Hívja meg az egyik statikus módszert AutomationInteropProvider egy olyan esemény indítására, amelyet az ügyfél figyelhet. |
Navigáció engedélyezése és összpontosítás egy töredéken belül | Implementálás IRawElementProviderFragment a töredék minden egyes eleméhez. (Nem szükséges olyan elemekhez, amelyek nem részei a töredéknek.) |
Gyermekelem fókuszának és helyének engedélyezése egy töredékben | Implementálás IRawElementProviderFragmentRoot. (Nem szükséges olyan elemekhez, amelyek nem töredezett gyökerek.) |
Tulajdonságértékek nem WPF-szolgáltatókban
UI-automatizálás egyéni vezérlők szolgáltatóinak támogatniuk kell bizonyos tulajdonságokat, amelyeket az automatizálási rendszer és az ügyfélalkalmazások használhatnak. Az ablakokban (HWND-k) üzemeltetett elemek esetében UI-automatizálás lekérhetnek bizonyos tulajdonságokat az alapértelmezett ablakszolgáltatótól, de másokat is be kell szereznie az egyéni szolgáltatótól.
A HWND-alapú vezérlők szolgáltatóinak általában nem kell megadniuk a következő tulajdonságokat (mezőértékekkel azonosítva):
Feljegyzés
Az RuntimeIdProperty ablakban üzemeltetett egyszerű elem vagy töredékgyökér az ablakból származik, azonban a gyökér alatti töredékelemeknek (például egy listamező listaelemeinek) meg kell adniuk a saját azonosítójukat. További információ: GetRuntimeId.
A IsKeyboardFocusableProperty Windows Forms-vezérlőben üzemeltetett szolgáltatók esetében a visszaadott értéknek kell lennie. Ebben az esetben előfordulhat, hogy az alapértelmezett ablakszolgáltató nem tudja lekérni a megfelelő értéket.
Ezt NameProperty általában a gazdagépszolgáltató biztosítja. Ha például egy egyéni vezérlő származik Controlbelőle, a név a Text
vezérlő tulajdonságából származik.
Lásd például a UI-automatizálás-szolgáltató tulajdonságainak visszaadása című témakört.
Események nem WPF-szolgáltatókban
UI-automatizálás szolgáltatóknak eseményeket kell létrehozniuk, hogy értesítsék az ügyfélalkalmazásokat a felhasználói felület állapotának változásairól. A következő módszereket használják az események létrehozásához.
Metódus | Leírás |
---|---|
RaiseAutomationEvent | Különböző eseményeket indít el, beleértve a vezérlőminták által aktivált eseményeket is. |
RaiseAutomationPropertyChangedEvent | Eseményt hoz létre, ha egy UI-automatizálás tulajdonság megváltozott. |
RaiseStructureChangedEvent | Eseményt hoz létre, ha a UI-automatizálás fa szerkezete megváltozott, például egy elem eltávolításával vagy hozzáadásával. |
Az esemény célja, hogy értesítse az ügyfelet arról, hogy valami történik a felhasználói felületen (UI), függetlenül attól, hogy a tevékenységet maga a UI-automatizálás rendszer aktiválja-e. Az általa InvokedEvent azonosított eseményt például a vezérlő meghívásakor vagy közvetlen felhasználói bemeneten vagy az ügyfélalkalmazás hívásán Invokekeresztül kell elindítani.
A teljesítmény optimalizálása érdekében a szolgáltató szelektíven hozhat létre eseményeket, vagy egyáltalán nem hozhat létre eseményeket, ha nincs regisztrálva ügyfélalkalmazás a fogadásukra. A rendszer az alábbi módszereket használja az optimalizáláshoz.
Metódus | Leírás |
---|---|
ClientsAreListening | Ez a statikus tulajdonság azt határozza meg, hogy az ügyfélalkalmazások feliratkoztak-e UI-automatizálás eseményekre. |
IRawElementProviderAdviseEvents | Az interfész a töredékgyökér szolgáltató általi implementációja lehetővé teszi, hogy az ügyfelek regisztrálják és törölje az eseménykezelők regisztrációját a töredéken lévő eseményekhez. |
Nem WPF-szolgáltató navigációja
Az olyan egyszerű vezérlők szolgáltatóinak, mint például egy ablakban üzemeltetett egyéni gomb (HWND) nem kell támogatniuk a UI-automatizálás fán belüli navigációt. Az elemre való navigálást a gazdagépablak alapértelmezett szolgáltatója kezeli, amely a gazdaablak implementálásában HostRawElementProvidervan megadva. Ha azonban egy szolgáltatót implementál egy összetett egyéni vezérlőhöz, támogatnia kell a töredék gyökércsomópontja és leszármazottai közötti, valamint a testvércsomópontok közötti navigációt.
Feljegyzés
A gyökértől eltérő töredék elemeinek HostRawElementProvidervissza kell adniuk a null
hivatkozásokat, mert azok nem közvetlenül egy ablakban vannak tárolva, és egyetlen alapértelmezett szolgáltató sem támogatja a hozzájuk való navigálást.
A töredék szerkezetét a .Navigate Az egyes töredékekből származó lehetséges irányok esetében ez a metódus az elem szolgáltatóobjektumát adja vissza ebben az irányban. Ha nincs elem ebben az irányban, a metódus egy null
hivatkozást ad vissza.
A töredékgyökér csak a gyermekelemekre való navigálást támogatja. Egy listamező például a lista első elemét adja vissza, ha az irány az , FirstChildés az utolsó elemet, ha az irány az LastChild. A töredékgyökér nem támogatja a szülőre vagy testvérekre való navigálást; ezt a gazdagépablak-szolgáltató kezeli.
A nem gyökérként megadott töredék elemeinek támogatniuk kell a szülőre, illetve az esetleges testvéreikre és gyermekeikre való navigálást.
Nem WPF-szolgáltató újratelepítése
Az előugró ablakok valójában legfelső szintű ablakok, ezért alapértelmezés szerint az asztal gyermekeiként jelennek meg a UI-automatizálás fában. Sok esetben azonban az előugró ablakok logikailag valamilyen más vezérlő gyermekei. A kombinált lista legördülő listája például logikailag a kombinált lista gyermekeleme. Hasonlóképpen, a menü előugró ablaka logikailag a menü gyermeke. UI-automatizálás támogatja az előugró ablakok újratelepítését, hogy azok a társított vezérlő gyermekeinek tűnjenek.
Előugró ablak újbóli küldése:
Hozzon létre egy szolgáltatót az előugró ablakhoz. Ehhez előre ismernie kell az előugró ablak osztályát.
Az előugró ablak minden tulajdonságát és mintáját a szokásos módon implementálhatja, mintha saját jogán vezérlő lenne.
Implementálja a HostRawElementProvider tulajdonságot úgy, hogy visszaadja a kapott HostProviderFromHandleértéket, ahol a paraméter az előugró ablak ablakkezelője.
Implementálja Navigate az előugró ablakot és annak szülőjét, hogy a navigáció megfelelően legyen kezelve a logikai szülőtől a logikai gyermekekig és a testvérgyermekek között.
Amikor UI-automatizálás találkozik az előugró ablakkal, felismeri, hogy a navigáció felül van bírálva az alapértelmezett értéken, és átugorja az előugró ablakot, amikor az asztal gyermekeként történik. Ehelyett a csomópont csak a töredéken keresztül lesz elérhető.
Az újratelepítés nem alkalmas olyan esetekre, amikor egy vezérlő bármilyen osztály ablakát üzemeltetheti. Egy sáv például bármilyen típusú HWND-t üzemeltethet a sávjaiban. Az ilyen esetek kezeléséhez UI-automatizálás támogatja a HWND áthelyezésének alternatív formáját, a következő szakaszban leírtak szerint.
Nem WPF-szolgáltató áthelyezése
UI-automatizálás töredékek két vagy több olyan elemet tartalmazhatnak, amelyek mindegyike egy ablakban (HWND) található. Mivel minden HWND saját alapértelmezett szolgáltatóval rendelkezik, amely a HWND-t egy tartalmazó HWND gyermekének tekinti, a UI-automatizálás fa alapértelmezés szerint a szülőablak gyermekeiként jeleníti meg a töredékben lévő HWND-ket. A legtöbb esetben ez kívánatos viselkedés, de néha zavart okozhat, mert nem egyezik a felhasználói felület logikai szerkezetével.
Erre jó példa a sávvezérlő. A sávok sávokat tartalmaznak, amelyek mindegyike tartalmazhat HWND-alapú vezérlőt, például eszköztárat, szerkesztődobozt vagy kombinált listát. A HWND sáv alapértelmezett ablakszolgáltatója gyermekként látja a sávvezérlő HWND-ket, a sávszolgáltató pedig gyermekként látja a sávokat. Mivel a HWND-szolgáltató és a rebar szolgáltató együtt dolgozik a gyermekeikkel, a sávok és a HWND-alapú vezérlők a rebar gyermekeiként jelennek meg. Logikailag azonban csak a sávok jelenjenek meg a sáv gyermekeiként, és minden sávszolgáltatót az alapértelmezett HWND-szolgáltatóval kell összekapcsolni a benne található vezérlőhöz.
Ennek érdekében a sávtöredék gyökérszolgáltatója a sávokat képviselő gyermekek egy csoportját teszi elérhetővé. Minden sáv egyetlen szolgáltatóval rendelkezik, amely tulajdonságokat és mintákat tehet közzé. A sávszolgáltató a HWND vezérlő alapértelmezett ablakszolgáltatóját HostRawElementProvideradja vissza, amelyet hívással HostProviderFromHandleszerez be, és átadja a vezérlő ablakleírójának. Végül a rebar töredék gyökérszolgáltatója implementálja az IRawElementProviderHwndOverride interfészt, és annak megvalósítása során GetOverrideProviderForHwnd visszaadja a megfelelő sávszolgáltatót a megadott HWND-ben található vezérlőhöz.
Lásd még
- UI-automatizálás szolgáltatók áttekintése
- Kiszolgálóoldali UI-automatizálás-szolgáltató felfedés
- Tulajdonságok visszaadása egy UI-automatizálás-szolgáltatótól
- Események létrehozása egy UI-automatizálás-szolgáltatótól
- Navigáció engedélyezése UI-automatizálás töredékszolgáltatóban
- Támogatási vezérlőminták egy UI-automatizálás-szolgáltatóban