E N D
1. The New COM API for Accessibility and Automation in Windows 7 ? Michael Bernstein
Principal Software Design Engineer
Microsoft Corporation
2. Programmatic UI Access: A Key Element of Accessibility Enables developers to write code that:
Navigates between UI elements
Gathers information about the UI
Interacts with UI elements
Receives notifications when the UI changes 2
3. UI Automation (UIA):Programmatic Access in Windows Successor to Microsoft Active Accessibility (MSAA)
Creates a universal object model for accessing UI
Designed based on experience with MSAA usage
Supported on Windows Vista, XP and Server 2003
UIA COM Client API introduced in Windows 7 3
4. What’s new in Windows 7? UIA Clients can now use COM instead of managed code
New Accessibility properties are available
Native clients can register custom ‘proxies’ to make existing UI more accessible
Developers can define custom Accessibility properties and events beyond the official UIA list
5. Inspecting UIA Properties demo
6. Context: Clients and Providers
7. Taking advantage of the new COM Client API
8. SAMPLE: Querying a window’s password status CComPtr<IUIAutomation> spAutomation;
CComPtr<IUIAutomationElement> spElement;
HRESULT hr;
hr = spAutomation.CoCreateInstance(CLSID_CUIAutomation);
if (SUCCEEDED(hr))
{
hr = spAutomation->GetFocusedElement(&spElement);
if (SUCCEEDED(hr))
{
BOOL isPassword;
spElement->get_CurrentIsPassword(&isPassword);
}
}
9. Automation Elements Just as in the managed API, an automation element represents a piece of UI, regardless of underlying implementation
First, create an instance of CUIAutomation, the factory for the object model
Next, get an element:
From an HWND: ElementFromHandle
From a Point: ElementFromPoint
From current focus: GetFocusedElement
Each method returns an IUIAutomationElement
10. Basic Properties IUIAutomationElement exposes properties that make sense for elements in general
Properties are exposed in COM manner and are consistent across all underlying UI
11. Three Key Properties NameProperty
String that a user would use to explain which control was being referred to (Customer: Accessibility Tools)
ControlTypeProperty
Primary identifier for what type of control the automation element represents. (Customers: Both)
AutomationIdProperty
String that uniquely identifies an element among its siblings in the tree (Customer: Test Automation)
12. Control Patterns Control Patterns allow access to a control’s particular abilities
InvokePattern: ‘Push Me’
TransformPattern: ‘Move Me’
ScrollPattern: ‘Scroll Me’
SelectionItemPattern: ‘Select Me’
Patterns can contain properties, methods and events
13. Find Requests Find requests allow you to locate elements based on conditions
Conditions are based on property matching
They can include Boolean operators as well
Requests can be restricted by scope
Find can return the first match or all matches
Faster alternative to manual searching
14. Visiting the Relatives: TreeWalker All UIA elements are organized into a tree
TreeWalkers allow navigation around the tree
GetParentElement, GetFirstChildElement,GetNextSiblingElement, etc.
Can filter by condition
15. Consuming Events Enable clients to be notified when changes occur in the UI
Client implements a listener interface
Register your listener with CUIAutomation
Clients can scope what parts of automation tree to listen for events on
Applicable events are always associated with a reference to automation element where change occurred
http://msdn.microsoft.com/en-us/library/aa359583(VS.85).aspx
15
16. DumpUIATree sample
17. Accelerate your access: CacheRequests
18. Revisiting DumpUIATree sample
19. New properties and patterns
20. Patterns for Control Virtualization Allows controls to have more children than are exposed in Automation tree at one time
Parent container permits searching for children by property
Children can be de-virtualized upon request
Useful for:
Containers with massive numbers of children
21. Other new properties and patterns
22. Building great UIA Providers
23. When do you need a provider? You don’t always need to write a provider.
Customizing beyond your framework
Changing perceived properties
Annotation API may be sufficient
Adding new abilities
Full custom controls
Creating new frameworks
Silverlight had to implement Accessibility
24. Implementing the simple interface Create a COM object that implements IRawElementProviderSimple
Retrieve VARIANT properties
Implement the most important ones for your control, especially Name and ControlType
Retrieve a pattern implementation
Connect your COM object to the outside world through WM_GETOBJECT
25. Implementing patterns Control patterns are much like interfaces
Can reside on same object or different object from Simple interface
Implement patterns that reflect your control’s abilities
26. A basic custom-control UIA provider sample
27. Beyond Simple Elements Representing children
Free support for mirroring HWND tree
When you have non-window children …
Implement Fragment for all nodes in your tree
Implement FragmentRoot for the root of your tree
Firing Events
If a user would notice a change in your control, you need to fire an event
You may check for listeners first
28. Custom patterns and properties Allows client and provider to exchange data beyond original Accessibility design
Custom work must be done on both sides
Properties and events: business as usual
Methods: extra marshalling work required
29. Custom ‘proxy’ support Enables a client to register a substitute provider for a UI that lacks a real provider
Proxy implements UIA interfaces on behalf of UI
Useful for legacy code that cannot be modified but must be made accessible
30. Wrapping it up
31. Is this all of Accessibility? Is your software usable with …
Programmatic access?
Keyboard-only access?
High contrast / high DPI?
Slow reaction times?
Accessibility is not a yes/no question: it is usability for a specific audience
http://msdn.microsoft.com/accessibility
32. What about managed clients? The new COM API was designed with .NET interoperability in mind
Pro: Fastest performance for programmatic access
Con: Imported COM interfaces are not identical with older interfaces
Con: Some Win32 controls have slight behavior differences
33. Managed client option #2:Use the existing managed library We continue to support the existing System.Windows.Automation namespace
Pro: No change to existing code
Con: May be slower when accessing MSAA applications
Con: Cannot access new properties and patterns with current version
34. Call to Action Use the new UI Automation Client API to interact with existing user interfaces
Create UI Automation providers for new custom controls and UI frameworks
Consider the Accessibility needs of your customers when designing applications