共用方式為


如何裝載 MSAA 無視窗 ActiveX 控制件

瞭解如何建立控件容器,以裝載實作 Microsoft Active Accessibility 的無視窗Microsoft ActiveX 控件。 依照此處所述的步驟,您可以確保任何裝載於控件容器中的 Microsoft Active Accessibility 型無視窗控件,都可供輔助技術 (AT) 用戶端應用程式存取。

您需要知道的事項

技術

先決條件

  • C/C++
  • Microsoft Win32 和元件物件模型 (COM) 程序設計
  • 無窗口 ActiveX 控制件
  • Microsoft Active Accessibility 伺服器

操作說明

步驟 1:代表無窗控制項提供根 IAccessible 介面。

每當系統需要一個無視窗控件根物件的 IAccessible 指標時,系統就會查詢控制容器。 為了找回指標,容器會呼叫無視窗控制項的實作 IServiceProvider::QueryService 方法。

如果控件容器具有Microsoft Active Accessibility 實作,它可以傳回無視窗控件的 IAccessible 指標給系統。

如果控件容器具有Microsoft UI 自動化實作,請呼叫 UiaProviderFromIAccessible 函式,以取得代表控件的 IRawElementProviderSimple 介面指標,然後傳回 IRawElementProviderSimple 介面指標給系統。

步驟 2:代表無視窗控件回應WM_GETOBJECT訊息。

當用戶端應用程式回應無視窗控件引發的 WinEvent 時,控件容器會代表控件接收 WM_GETOBJECT 訊息。 訊息包含引發事件的無視窗控制件物件標識碼。

控件容器會透過查詢持有物件ID的無視窗控件來回應,然後呼叫該控件的 IAccessibleHandler::AccessibleObjectFromID 方法。 AccessibleObjectFromID 方法會傳回 UI 專案的 IAccessible 介面指標,而控件容器會傳回系統指標,將它轉送至用戶端應用程式。

步驟 3:實作 IAccessibleWindowlessSite 介面。

  1. 實作 IAccessibleWindowlessSite::GetParentAccessible 方法。

    當用戶端應用程式需要有關無窗口控制項根提供者父輩的輔助功能資訊時,系統會呼叫無窗口控制項的 IAccessible::get_accParent 方法。 控件會呼叫控件容器的 IAccessibleWindowlessSite::GetParentAccessible 方法來回應,此方法會提供無視窗控件父系的 IAccessible 指標。

  2. 實作 IAccessibleWindowlessSite::AcquireObjectIdRangeQueryObjectIdRangeReleaseObjectIdRange 方法。

    您的控制容器必須維護物件 ID 範圍與無窗口控制項的對應。 對應可使控制項容器識別出應該回應特定物件 ID 請求的控制項。 下表顯示將物件標識元範圍對應至無視窗控制件的範例。

    基礎範圍 範圍大小 控制
    1000 500 控制 1
    1500 1000 控件 2
    2500 2000 控件 1

     

    控件容器必須維護物件標識符範圍與無視窗控制項本身和所有無視窗子系的對應。 物件標識碼範圍不需要彼此相鄰。 此外,為了避免拒絕服務攻擊,控制容器可以限制授與特定控件的範圍數目。 然而,允許每個控件具有超過一個範圍,可以使控件擴展,這樣相當實用。

步驟 4:選擇性:實作 IAccessibleHostingElementProviders 介面。

如果您的控制容器具有 Microsoft Active Accessibility 伺服器的實作,且該伺服器是包括支援 UI 自動化的無視窗 ActiveX 控制項的輔助功能樹的根目錄,請實作 IAccessibleHostingElementProviders 介面。 IAccessibleHostingElementProviders 介面具有單一方法,GetEmbeddedFragmentRoots,它會擷取控件容器所裝載之所有 UI 自動化無視窗 ActiveX 控件的介面指標 IRawElementProviderFragmentRoot 介面指標。

如何裝載UI自動化無視窗ActiveX控件

無窗口 ActiveX 控制件輔助功能