IAccessible Proxy

IAccessible Proxy 提供標準 UI 元素的預設協助工具資訊:來自 COMCTL 和 COMCTL32 的使用者控制項、使用者功能表和一般控制項。 此預設支援是透過Oleacc.dll所建立的 IAccessible 物件公開,並提供 Microsoft Active Accessibility 支援,而不需要額外的伺服器開發工作。 然後,伺服器可以使用 動態批註 API 來修改Oleacc.dll公開的大部分資訊,但它沒有完整的控制權。

建立 Proxy

若要判斷 UI 元素是否原生支援 IAccessible 介面,Oleacc.dll傳送 WM_GETOBJECT 訊息。 非零的傳回值表示元素原生支援 Microsoft Active Accessibility,並提供自己的 IAccessible 支援。 不過,如果傳回值為零,Oleacc.dll會為 UI 元素提供 Proxy 物件,並嘗試代表它傳回有意義的資訊。 如需 WM_GETOBJECT的詳細資訊,請參閱 WM_GETOBJECT 的運作方式

公開哪些資訊

Oleacc.dll使用 UI 元素的 Windows 類別名稱來判斷應該針對每個 IAccessible 屬性公開哪些資訊,以及如何收集該資訊。 例如,Oleacc.dll呼叫 GetWindowText 函式來擷取標準按鈕的 Name 屬性,但會呼叫這個相同的函式來擷取標準編輯控制項的 Value 屬性。 實際上,Oleacc.dll會將每個 IAccessible 方法對應至適當的 Microsoft Win32 或控制項特定訊息或函式呼叫。 藉由使用此類別名稱型特殊大小寫,它可以透過 IAccessible Proxy 傳回有意義的資訊,而不需要伺服器中的任何 Microsoft Active Accessibility 支援。

使用標準 UI 元素建置的應用程式通常會獲得完整的 Microsoft Active Accessibility 支援,而不需要額外的開發工作。 此規則的例外狀況是已子類別化的控制項,這些控制項不會儲存自己的字串, (沒有 HASSTRINGS 樣式) ,或是由擁有者繪製。 在這些情況下,Oleacc.dll無法收集所需的資訊,因為該資訊會儲存在控制項外部。 不過,在這些案例中,已建立因應措施或使用動態注釋,可讓伺服器與Oleacc.dll所提供的 Proxy 合作。

泛型 Proxy 物件

如果Oleacc.dll無法辨識 UI 元素的類別名稱,它會建立一個盡可能公開資訊的泛型 Proxy。 這最多包括物件的周框、父物件、從 WM_GETTEXT) 的名稱 (,以及視窗階層中的任何子系。