如何裝載 MSAA 無視窗 ActiveX 控制項
瞭解如何建立可裝載無視窗 Microsoft ActiveX 控制項的控制項容器,以實作 Microsoft Active Accessibility。 依照此處所述的步驟,您可以確保裝載于控制項容器中的任何 Microsoft Active 協助工具型無視窗控制項都可以存取輔助技術 (AT) 用戶端應用程式。
您所需了解的事情
技術
必要條件
- C/C++
- Microsoft Win32 和元件物件模型 (COM) 程式設計
- 無視窗 ActiveX 控制項
- Microsoft Active Accessibility 伺服器
指示
步驟 1:代表無視窗控制項提供根 IAccessible 介面。
每當系統需要無視窗控制項根目錄的 IAccessible 指標時,系統就會查詢控制項容器。 若要擷取指標,容器會呼叫無視窗控制項的 IServiceProvider::QueryService 方法實作。
如果控制項容器有 Microsoft Active Accessibility 實作,它可以傳回無視窗控制項的 IAccessible 指標給系統。
如果控制項容器有 Microsoft 消費者介面自動化實作,請呼叫UiaProviderFromIAccessible函式來取得代表控制項的IRawElementProviderSimple介面指標,然後將IRawElementProviderSimple介面指標傳回系統。
步驟 2:代表無視窗控制項回應WM_GETOBJECT訊息。
當用戶端應用程式回應由無視窗控制項引發的 WinEvent 時,控制項容器會代表控制項接收 WM_GETOBJECT 訊息。 此訊息包含引發事件的無視窗控制項物件識別碼。
控制項容器會藉由查閱「擁有」物件識別碼的無視窗控制項來回應,然後呼叫該控制項的 IAccessibleHandler::AccessibleObjectFromID 方法。 AccessibleObjectFromID方法會傳回 UI 專案的IAccessible介面指標,而控制項容器會傳回系統的指標,它會將它轉送到用戶端應用程式。
步驟 3:實作 IAccessibleWindowlessSite 介面。
實作 IAccessibleWindowlessSite::GetParentAccessible 方法。
當用戶端應用程式需要無視窗控制項根提供者父系的協助工具資訊時,系統會呼叫無視窗控制項的 IAccessible::get_accParent 方法。 控制項會呼叫控制項容器的 IAccessibleWindowlessSite::GetParentAccessible 方法來回應,這個方法會提供無視窗控制項父代的 IAccessible 指標。
實作 IAccessibleWindowlessSite::AcquireObjectIdRange、 QueryObjectIdRange和 ReleaseObjectIdRange 方法。
控制項容器必須維護物件識別碼範圍與無視窗控制項的對應。 對應可讓控制項容器識別應該回應物件識別碼特定要求的控制項。 下表顯示將物件識別碼範圍對應至無視窗控制項的範例。
範圍基底 範圍大小 控制 1000 500 控制項 1 1500 1000 控制項 2 2500 2000 控制項 1 控制項容器必須維護物件識別碼範圍與本身和所有無視窗子系的無視窗控制項的對應。 物件識別碼範圍不需要彼此相鄰。 此外,若要避免拒絕服務攻擊,控制容器可以限制授與特定控制項的範圍數目。 不過,允許每個控制項有一個以上的範圍,讓控制項能夠成長相當有用。
步驟 4:選擇性:實作 IAccessibleHostingElementProviders 介面。
如果您的控制項容器具有 Microsoft Active Accessibility 伺服器實作,而且伺服器是協助工具樹狀結構的根目錄,其中包含支援消費者介面自動化的無視窗 ActiveX 控制項,請實作IAccessibleHostingElementProviders介面。 IAccessibleHostingElementProviders介面具有單一方法GetEmbeddedFragmentRoots,它會擷取控制項容器所裝載之所有消費者介面自動化無視窗 ActiveX 控制項的IRawElementProviderFragmentRoot介面指標。
相關主題