Aracılığıyla paylaş


UI Otomasyonu ve Microsoft Active Accessibility

Not

Bu belgeler, ad alanında tanımlanan yönetilen UI Otomasyonu sınıflarını kullanmak isteyen .NET Framework geliştiricilerine System.Windows.Automation yöneliktir. UI Otomasyonu hakkında en son bilgiler için bkz. Windows Otomasyonu API'si: UI Otomasyonu.

Microsoft Etkin Erişilebilirlik, uygulamaları erişilebilir hale getirmek için önceki çözümdü. Microsoft UI Otomasyonu, Microsoft Windows için yeni erişilebilirlik modelidir ve yardımcı teknoloji ürünlerinin ve otomatik test araçlarının ihtiyaçlarını karşılamaya yöneliktir. UI Otomasyonu, Etkin Erişilebilirlik üzerinde birçok geliştirme sunar.

Bu konu, UI Otomasyonu ana özelliklerini içerir ve bu özelliklerin Etkin Erişilebilirlik'ten nasıl farklı olduğunu açıklar.

Programlama Dilleri

Etkin Erişilebilirlik, çift arabirim desteğine sahip Bileşen Nesne Modeli'ni (COM) temel alır ve bu nedenle C/C++, Microsoft Visual Basic 6.0 ve betik dillerinde programlanabilir. UI Otomasyonu (standart denetimler için istemci tarafı sağlayıcı kitaplığı dahil) yönetilen kodda yazılır ve UI Otomasyonu istemci uygulamaları en kolay şekilde C# veya Visual Basic .NET kullanılarak programlanır. Arabirim uygulamaları olan UI Otomasyonu sağlayıcıları yönetilen kodda veya C/C++ dilinde yazılabilir.

Windows Presentation Foundation'da destek

Windows Presentation Foundation (WPF), kullanıcı arabirimleri oluşturmaya yönelik yeni modeldir. WPF öğeleri Etkin Erişilebilirlik için yerel destek içermez; ancak, Etkin Erişilebilirlik istemcileri için köprü oluşturma desteği içeren UI Otomasyonu destekler. Yalnızca UI Otomasyonu için özel olarak yazılmış istemciler, metin için zengin destek gibi WPF'nin erişilebilirlik özelliklerinden tam olarak yararlanabilir.

Sunucular ve İstemciler

Etkin Erişilebilirlik'te sunucular ve istemciler, büyük ölçüde sunucunun uygulaması IAccessiblearacılığıyla doğrudan iletişim kurar.

UI Otomasyonu'de, sunucu (sağlayıcı olarak adlandırılır) ile istemci arasında temel bir hizmet bulunur. Çekirdek hizmet, sağlayıcılar tarafından uygulanan arabirimlere çağrı yapar ve öğeler için benzersiz çalışma zamanı tanımlayıcıları oluşturma gibi ek hizmetler sağlar. İstemci uygulamaları, UI Otomasyonu hizmetini çağırmak için kitaplık işlevlerini kullanır.

UI Otomasyonu sağlayıcıları Etkin Erişilebilirlik istemcilerine ve Etkin Erişilebilirlik sunucuları da UI Otomasyonu istemci uygulamalarına bilgi sağlayabilir. Ancak, Etkin Erişilebilirlik UI Otomasyonu kadar çok bilgi sunmadığından, iki model tam olarak uyumlu değildir.

UI Öğeleri

Etkin Erişilebilirlik, kullanıcı arabirimi öğelerini arabirim IAccessible veya alt tanımlayıcı olarak sunar. Aynı öğeye başvurup başvurmadıklarını belirlemek için iki IAccessible işaretçiyi karşılaştırmak zordur.

UI Otomasyonu her öğe bir AutomationElement nesne olarak temsil edilir. Karşılaştırma, her ikisi de öğelerin benzersiz çalışma zamanı tanımlayıcılarını karşılaştıran eşitlik işleci veya Equals yöntemi kullanılarak yapılır.

Ağaç Görünümleri ve Gezinti

Ekrandaki kullanıcı arabirimi (UI) öğeleri, masaüstü kök, uygulama pencereleri hemen alt öğeler ve uygulamalar içindeki öğeler diğer alt öğeler olarak bir ağaç yapısı olarak görülebilir.

Etkin Erişilebilirlik'te, son kullanıcılarla ilgisiz olan birçok otomasyon öğesi ağaçta kullanıma sunulur. İstemci uygulamalarının anlamlı olup olmadığını belirlemek için tüm öğelere bakmış olması gerekir.

UI Otomasyonu istemci uygulamaları, filtrelenmiş bir görünüm aracılığıyla kullanıcı arabirimini görür. Görünüm yalnızca ilgilendiğiniz öğeleri içerir: kullanıcıya bilgi veren veya etkileşimi etkinleştiren öğeler. Yalnızca denetim öğelerinin ve yalnızca içerik öğelerinin önceden tanımlanmış görünümleri kullanılabilir; ayrıca, uygulamalar özel görünümler tanımlayabilir. UI Otomasyonu, kullanıcıya kullanıcı arabirimini açıklama ve kullanıcının uygulamayla etkileşim kurmasına yardımcı olma görevini basitleştirir.

Etkin Erişilebilirlik'te öğeler arasındaki gezinti uzamsal (örneğin, ekranın solundaki öğeye taşıma), mantıksal (örneğin, bir sonraki menü öğesine veya iletişim kutusunun içindeki sekme sırasına göre bir sonraki öğeye) veya hiyerarşiktir (örneğin, kapsayıcıdaki ilk alt öğeyi taşıma veya alt öğeden üst öğeye taşıma). Hiyerarşik gezinti, alt öğelerin her zaman uygulayan IAccessiblenesneler olmamasıyla karmaşıktır.

UI Otomasyonu tüm kullanıcı arabirimi öğeleri aynı temel işlevselliği destekleyen nesnelerdirAutomationElement. (Sağlayıcı açısından bakıldığında, bunlar öğesinden IRawElementProviderSimpledevralınan bir arabirim uygulayan nesnelerdir.) Gezinti çoğunlukla hiyerarşiktir: ebeveynlerden çocuklara ve bir eşdüzeyden diğerine. (Eşdüzeyler arasındaki gezinti, sekme sırasını takip edebilmesi nedeniyle mantıksal bir öğeye sahiptir.) Sınıfını kullanarak herhangi bir başlangıç noktasından, ağacın filtrelenmiş herhangi bir görünümünü kullanarak TreeWalker gezinebilirsiniz. ve FindAllkullanarak FindFirst belirli alt öğelere veya alt öğelere de gidebilirsiniz; örneğin, bir iletişim kutusunda belirtilen denetim düzenini destekleyen tüm öğeleri almak çok kolaydır.

UI Otomasyonu gezintisi, Etkin Erişilebilirlik'ten daha tutarlıdır. Açılan listeler ve açılır pencereler gibi bazı öğeler Etkin Erişilebilirlik ağacında iki kez görünür ve bunlardan gezinti beklenmedik sonuçlar verebilir. Aslında, bir rebar denetimi için Etkin Erişilebilirlik'i düzgün bir şekilde uygulamak mümkün değildir. UI Otomasyonu yeniden ayrıştırma ve yeniden konumlandırmayı etkinleştirir, böylece bir öğe, pencerelerin sahipliği tarafından uygulanan hiyerarşiye rağmen ağaçta herhangi bir yere yerleştirilebilir.

Roller ve Denetim Türleri

Etkin Erişilebilirlik, ROLE_SYSTEM_SLIDER veya ROLE_SYSTEM_MENUITEM gibi kullanıcının kullanıcı arabirimindeki rolünün açıklamasını almak için (IAccessible::get_actRole) özelliğini kullanıraccRole. Bir öğenin rolü, kullanılabilir işlevselliğinin ana ipucudur. Bir denetimle etkileşim, ve IAccessible::accDoDefaultActiongibi IAccessible::accSelect sabit yöntemler kullanılarak elde edilir. İstemci uygulaması ve kullanıcı arabirimi arasındaki etkileşim, aracılığıyla IAccessibleyapılabileceklerle sınırlıdır.

Buna karşılık, UI Otomasyonu öğenin denetim türünü (özelliği tarafından ControlType açıklanan) beklenen işlevselliğinden büyük ölçüde kaldırır. İşlevsellik, özel arabirimlerin uygulanması yoluyla sağlayıcı tarafından desteklenen denetim desenleri tarafından belirlenir. Denetim desenleri, belirli bir kullanıcı arabirimi öğesi tarafından desteklenen tüm işlev kümesini açıklamak için birleştirilebilir. Bazı sağlayıcıların belirli bir denetim düzenini desteklemesi gerekir; örneğin, onay kutusunun sağlayıcısı Geçiş denetimi düzenini desteklemelidir. Diğer sağlayıcıların bir veya daha fazla denetim desenini desteklemesi gerekir; örneğin, düğme Geçiş veya Çağır'ı desteklemelidir. Yine de diğerleri hiçbir denetim deseni desteklemez; örneğin, taşınamayan, yeniden boyutlandırılamayan veya yerleştirilemeyen bir bölmede herhangi bir denetim deseni yoktur.

UI Otomasyonu özelliği tarafından tanımlanan ve özelliği tarafından CustomLocalizedControlTypeProperty açıklanabilir özel denetimleri destekler.

Aşağıdaki tabloda, Etkin Erişilebilirlik rollerinin UI Otomasyonu denetim türlerine eşlemesi gösterilmektedir.

Etkin Erişilebilirlik rolü UI Otomasyonu denetim türü
ROLE_SYSTEM_PUSHBUTTON Düğme
ROLE_SYSTEM_CLIENT Calendar
ROLE_SYSTEM_CHECKBUTTON Onay kutusu
ROLE_SYSTEM_COMBOBOX Birleşik giriş kutusu
ROLE_SYSTEM_CLIENT Özel
ROLE_SYSTEM_LIST Veri kılavuzu
ROLE_SYSTEM_LISTITEM Veri öğesi
ROLE_SYSTEM_DOCUMENT Belge
ROLE_SYSTEM_TEXT Düzenle
ROLE_SYSTEM_GROUPING Gruplandırma
ROLE_SYSTEM_LIST Üst bilgi
ROLE_SYSTEM_COLUMNHEADER Üst bilgi öğesi
ROLE_SYSTEM_LINK Köprü
ROLE_SYSTEM_GRAPHIC Görsel
ROLE_SYSTEM_LIST Liste
ROLE_SYSTEM_LISTITEM Liste öğesi
ROLE_SYSTEM_MENUPOPUP Menü
ROLE_SYSTEM_MENUBAR Menü çubuğu
ROLE_SYSTEM_MENUITEM Menü Öğesi
ROLE_SYSTEM_PANE Bölme
ROLE_SYSTEM_PROGRESSBAR İlerleme çubuğu
ROLE_SYSTEM_RADIOBUTTON Radio button
ROLE_SYSTEM_SCROLLBAR Kaydırma çubuğu
ROLE_SYSTEM_SEPARATOR Ayırıcı
ROLE_SYSTEM_SLIDER Kaydırıcı
ROLE_SYSTEM_SPINBUTTON Değer değiştirici
ROLE_SYSTEM_SPLITBUTTON Böl düğmesi
ROLE_SYSTEM_STATUSBAR Durum çubuğu
ROLE_SYSTEM_PAGETABLIST Sekme
ROLE_SYSTEM_PAGETAB Sekme öğesi
ROLE_SYSTEM_TABLE Tablo
ROLE_SYSTEM_STATICTEXT Metin
ROLE_SYSTEM_INDICATOR Parmak
ROLE_SYSTEM_TITLEBAR Başlık çubuğu
ROLE_SYSTEM_TOOLBAR Araç çubuğu
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE Ağaç
ROLE_SYSTEM_OUTLINEITEM Ağaç öğesi
ROLE_SYSTEM_WINDOW Pencere

Farklı denetim türleri hakkında daha fazla bilgi için bkz. UI Otomasyonu Denetim Türleri.

Durumlar ve Özellikler

Etkin Erişilebilirlik'te öğeler ortak bir özellik kümesini destekler ve bazı özelliklerin (örneğin accState) öğenin rolüne bağlı olarak çok farklı şeyler tanımlaması gerekir. Sunucular, öğeyle IAccessible ilgili olmayanlar bile bir özellik döndüren tüm yöntemlerini uygulamalıdır.

UI Otomasyonu, bazıları Etkin Erişilebilirlik durumlarına karşılık gelen daha birçok özellik tanımlar. Bazıları tüm öğeler için ortaktır, ancak bazıları denetim türlerine ve denetim desenlerine özeldir. Özellikler benzersiz tanımlayıcılarla ayırt edilir ve özelliklerin çoğu tek bir yöntem GetCurrentPropertyValue veya GetCachedPropertyValuekullanılarak alınabilir. Birçok özellik ve özellik erişimcilerinden CurrentCached de kolayca alınabilir.

UI Otomasyonu sağlayıcısının ilgisiz özellikler uygulaması gerekmez, ancak desteklemediği özellikler için bir null değer döndürebilir. Ayrıca, UI Otomasyonu çekirdek hizmeti bazı özellikleri varsayılan pencere sağlayıcısından alabilir ve bunlar sağlayıcı tarafından açıkça uygulanan özelliklerle birleştirilir.

UI Otomasyonu daha fazla özelliği desteklemenin yanı sıra tek bir çapraz işlem çağrısıyla birden çok özelliğin alınmasına izin vererek daha iyi performans sağlar.

Aşağıdaki tabloda iki modeldeki özellikler arasındaki yazışma gösterilmektedir.

Etkin Erişilebilirlik özellik erişimcisi UI Otomasyonu özellik kimliği Açıklamalar
get_accKeyboardShortcut AccessKeyProperty veya AcceleratorKeyProperty AccessKeyProperty her ikisi de varsa öncelik kazanır.
get_accName NameProperty
get_accRole ControlTypeProperty Rollerin denetim türlerine eşlemini görmek için önceki tabloya bakın.
get_accValue ValuePattern.ValueProperty

RangeValuePattern.ValueProperty
Yalnızca ValuePattern veya RangeValuePattern'ı destekleyen denetim türleri için geçerlidir. RangeValue değerleri MSAA davranışıyla tutarlı olması için 0-100 arasında normalleştirilir. Değer öğeleri bir dize kullanır.
get_accHelp HelpTextProperty
accLocation BoundingRectangleProperty
get_accDescription UI Otomasyonu'da desteklenmez accDescription MSAA içinde net bir belirtim yoktu, bu da sağlayıcıların bu özelliğe farklı bilgi parçaları yerleştirmesine neden oldu.
get_accHelpTopic UI Otomasyonu'da desteklenmez

Aşağıdaki tabloda hangi UI Otomasyonu özelliklerinin Etkin Erişilebilirlik durumu sabitlerine karşılık geldiğini gösterilmektedir.

Etkin Erişilebilirlik durumu UI Otomasyonu özelliği Durum Değişikliği tetiklesin mi?
STATE_SYSTEM_CHECKED Onay kutusu için, ToggleStateProperty

Radyo düğmesi için IsSelectedProperty
Y
STATE_SYSTEM_COLLAPSED ExpandCollapseState = Collapsed Y
STATE_SYSTEM_EXPANDED ExpandCollapseState = Expanded veya PartiallyExpanded Y
STATE_SYSTEM_FOCUSABLE IsKeyboardFocusableProperty N
STATE_SYSTEM_FOCUSED HasKeyboardFocusProperty N
STATE_SYSTEM_HASPOPUP ExpandCollapsePattern menü öğeleri için N
STATE_SYSTEM_INVISIBLE IsOffscreenProperty = True ve GetClickablePoint nedenleri NoClickablePointException N
STATE_SYSTEM_LINKED ControlTypeProperty =

Hyperlink
N
STATE_SYSTEM_MIXED ToggleState = Indeterminate N
STATE_SYSTEM_MOVEABLE CanMoveProperty N
STATE_SYSTEM_MUTLISELECTABLE CanSelectMultipleProperty N
STATE_SYSTEM_OFFSCREEN IsOffscreenProperty = Doğru N
STATE_SYSTEM_PROTECTED IsPasswordProperty N
STATE_SYSTEM_READONLY RangeValuePattern.IsReadOnlyProperty ve ValuePattern.IsReadOnlyProperty N
STATE_SYSTEM_SELECTABLE SelectionItemPattern desteklenir N
STATE_SYSTEM_SELECTED IsSelectedProperty N
STATE_SYSTEM_SIZEABLE CanResize N
STATE_SYSTEM_UNAVAILABLE IsEnabledProperty Y

Aşağıdaki durumlar çoğu Etkin Erişilebilirlik denetimi sunucusu tarafından uygulanmadı veya UI Otomasyonu eşdeğeri yok.

Etkin Erişilebilirlik durumu Açıklamalar
STATE_SYSTEM_BUSY UI Otomasyonu'da kullanılamaz
STATE_SYSTEM_DEFAULT UI Otomasyonu'da kullanılamaz
STATE_SYSTEM_ANIMATED UI Otomasyonu'da kullanılamaz
STATE_SYSTEM_EXTSELECTABLE Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_MARQUEED Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_SELFVOICING Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_TRAVERSED UI Otomasyonu'da kullanılamaz
STATE_SYSTEM_ALERT_HIGH Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_ALERT_MEDIUM Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_ALERT_LOW Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_FLOATING Etkin Erişilebilirlik sunucuları tarafından yaygın olarak uygulanmaz
STATE_SYSTEM_HOTTRACKED UI Otomasyonu'da kullanılamaz
STATE_SYSTEM_PRESSED UI Otomasyonu'da kullanılamaz

UI Otomasyonu özellik tanımlayıcılarının tam listesi için bkz. UI Otomasyonu Özelliklere Genel Bakış.

Ekinlikler

UI Otomasyonu'daki olay mekanizması, Etkin Erişilebilirlik'tekinden farklı olarak Windows olay yönlendirmesine (pencere tutamaçlarıyla yakından bağlıdır) güvenmez ve istemci uygulamasının kancaları ayarlamasını gerektirmez. Olaylara yönelik abonelikler yalnızca belirli olaylara değil, ağacın belirli bölümlerine de ince ayar yapılabilir. Sağlayıcılar ayrıca hangi olayların dinlenmekte olduğunu izleyerek olay oluşturma işlemleri için ince ayarlamalar yapabilir.

Bunlar doğrudan olay geri çağırmaya geçirildiğinden istemcilerin olayları tetikleyen öğeleri alması da daha kolaydır. İstemci olaya abone olduğunda bir önbellek isteği etkinse öğenin özellikleri otomatik olarak önceden oluşturulur.

Aşağıdaki tabloda Etkin Erişilebilirlik WinEvents ve UI Otomasyonu olaylarının yazışmaları gösterilmektedir.

WinEvent UI Otomasyonu olay tanımlayıcısı
EVENT_OBJECT_ACCELERATORCHANGE AcceleratorKeyProperty özellik değişikliği
EVENT_OBJECT_CONTENTSCROLLED VerticalScrollPercentProperty veya HorizontalScrollPercentProperty ilişkili kaydırma çubuklarında özellik değişikliği
EVENT_OBJECT_CREATE StructureChangedEvent
EVENT_OBJECT_DEFACTIONCHANGE Eşdeğeri yok
EVENT_OBJECT_DESCRIPTIONCHANGE Tam eşdeğeri yok; belki HelpTextProperty veya LocalizedControlTypeProperty özellik değişikliği
EVENT_OBJECT_DESTROY StructureChangedEvent
EVENT_OBJECT_FOCUS AutomationFocusChangedEvent
EVENT_OBJECT_HELPCHANGE HelpTextProperty Değiştirmek
EVENT_OBJECT_HIDE StructureChangedEvent
EVENT_OBJECT_LOCATIONCHANGE BoundingRectangleProperty özellik değişikliği
EVENT_OBJECT_NAMECHANGE NameProperty özellik değişikliği
EVENT_OBJECT_PARENTCHANGE StructureChangedEvent
EVENT_OBJECT_REORDER Etkin Erişilebilirlik'te tutarlı olarak kullanılmaz. UI Otomasyonu doğrudan karşılık gelen olay tanımlanmamıştır.
EVENT_OBJECT_SELECTION ElementSelectedEvent
EVENT_OBJECT_SELECTIONADD ElementAddedToSelectionEvent
EVENT_OBJECT_SELECTIONREMOVE ElementRemovedFromSelectionEvent
EVENT_OBJECT_SELECTIONWITHIN Eşdeğeri yok
EVENT_OBJECT_SHOW StructureChangedEvent
EVENT_OBJECT_STATECHANGE Çeşitli özellik değiştirme olayları
EVENT_OBJECT_VALUECHANGE RangeValuePattern.ValueProperty ve ValuePattern.ValueProperty değiştirildi
EVENT_SYSTEM_ALERT Eşdeğeri yok
EVENT_SYSTEM_CAPTUREEND Eşdeğeri yok
EVENT_SYSTEM_CAPTURESTART Eşdeğeri yok
EVENT_SYSTEM_CONTEXTHELPEND Eşdeğeri yok
EVENT_SYSTEM_CONTEXTHELPSTART Eşdeğeri yok
EVENT_SYSTEM_DIALOGEND WindowClosedEvent
EVENT_SYSTEM_DIALOGSTART WindowOpenedEvent
EVENT_SYSTEM_DRAGDROPEND Eşdeğeri yok
EVENT_SYSTEM_DRAGDROPSTART Eşdeğeri yok
EVENT_SYSTEM_FOREGROUND AutomationFocusChangedEvent
EVENT_SYSTEM_MENUEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPEND MenuClosedEvent
EVENT_SYSTEM_MENUPOPUPSTART MenuOpenedEvent
EVENT_SYSTEM_MENUSTART MenuOpenedEvent
EVENT_SYSTEM_MINIMIZEEND WindowVisualStateProperty özellik değişikliği
EVENT_SYSTEM_MINIMIZESTART WindowVisualStateProperty özellik değişikliği
EVENT_SYSTEM_MOVESIZEEND BoundingRectangleProperty özellik değişikliği
EVENT_SYSTEM_MOVESIZESTART BoundingRectangleProperty özellik değişikliği
EVENT_SYSTEM_SCROLLINGEND VerticalScrollPercentProperty veya HorizontalScrollPercentProperty özellik değişikliği
EVENT_SYSTEM_SCROLLINGSTART VerticalScrollPercentProperty veya HorizontalScrollPercentProperty özellik değişikliği
EVENT_SYSTEM_SOUND Eşdeğeri yok
EVENT_SYSTEM_SWITCHEND Eşdeğeri yoktur, ancak olay AutomationFocusChangedEvent yeni bir uygulamanın odağı aldığını belirtir
EVENT_SYSTEM_SWITCHSTART Eşdeğeri yok
Eşdeğeri yok CurrentViewProperty özellik değişikliği
Eşdeğeri yok HorizontallyScrollableProperty özellik değişikliği
Eşdeğeri yok VerticallyScrollableProperty özellik değişikliği
Eşdeğeri yok HorizontalScrollPercentProperty özellik değişikliği
Eşdeğeri yok VerticalScrollPercentProperty özellik değişikliği
Eşdeğeri yok HorizontalViewSizeProperty özellik değişikliği
Eşdeğeri yok VerticalViewSizeProperty özellik değişikliği
Eşdeğeri yok ToggleStateProperty özellik değişikliği
Eşdeğeri yok WindowVisualStateProperty özellik değişikliği
Eşdeğeri yok AsyncContentLoadedEvent Olay
Eşdeğeri yok ToolTipOpenedEvent

Güvenlik

Bazı IAccessible özelleştirme senaryoları için bir tabanı IAccessible sarmalama ve üzerinden çağrı yapılması gerekir. Kısmen güvenilen bir bileşenin bir kod yolunda aracı olmaması gerektiğinden bunun güvenlik açısından etkileri vardır.

UI Otomasyonu modeli, sağlayıcıların diğer sağlayıcı koduna çağrıda bulunması gereksinimini ortadan kaldırır. UI Otomasyonu çekirdek hizmeti tüm gerekli toplamaları yapar.

Ayrıca bkz.