處理WM_GETOBJECT訊息
Microsoft Active Accessibility 和 Microsoft 消費者介面自動化將WM_GETOBJECT訊息傳送至伺服器或提供者應用程式,以擷取伺服器或提供者所支援之可存取物件的相關資訊。 用戶端永遠不會直接傳送 WM_GETOBJECT 。 相反地,當用戶端呼叫AccessibleObjectFromPoint、AccessibleObjectFromEvent和AccessibleObjectFromWindow函式時,Microsoft Active Accessibility 會傳送此訊息。 當用戶端呼叫IUIAutomation::ElementFromHandle、ElementFromPoint和GetFocusedElement時,以及處理用戶端已註冊的事件時,消費者介面自動化會傳送WM_GETOBJECT。
Microsoft Active Accessibility 或 消費者介面自動化會傳遞稱為物件識別碼的值,並傳遞WM_GETOBJECT訊息,以指定它需要資訊的物件類型。 收到訊息時,伺服器或提供者會檢查物件識別碼,以判斷如何回應訊息。 回應取決於接收應用程式是否實作 Microsoft Active Accessibility (伺服器) 、消費者介面自動化 (提供者) 或指定之物件的兩者皆不實作。
- 如果接收應用程式是 Microsoft Active Accessibility 伺服器, 而WM_GETOBJECT 訊息包含 OBJID_CLIENT的物件識別碼,則伺服器應該傳回藉由將 物件的 IAccessible 介面傳遞至 LresultFromObject 函式來取得的值。
- 如果接收應用程式是消費者介面自動化提供者,而物件識別碼為UiaRootObjectId,提供者應該會傳回物件的IRawElementProviderSimple介面。 提供者藉由呼叫 UiaReturnRawElementProvider 函 式來取得介面。
- 如果接收的應用程式未實作 Microsoft Active Accessibility 或 消費者介面自動化,它應該會將WM_GETOBJECT訊息傳遞至DefWindowProc 函式。 傳遞訊息可讓協助工具架構判斷 Proxy 是否可供指定的物件使用。
- 如果物件識別碼不是 OBJID_CLIENT 或 UiaRootObjectId,接收的應用程式應該會將 WM_GETOBJECT 訊息傳遞至 DefWindowProc 函 式。 傳遞訊息可讓協助工具架構使用標準 UI 元素的預設提供者。
Microsoft Active Accessibility 和 消費者介面自動化可以在WM_GETOBJECT訊息中傳遞自訂物件識別碼,以從伺服器或提供者擷取應用程式定義的值或物件。 OBJID_NATIVEOM或OBJID_QUERYCLASSNAMEIDX物件識別碼可用來擷取原生物件模型介面,或要求Oleacc.dll支援的特定 Proxy 物件。
藉由處理OBJID_CLIENT和UiaRootObjectId物件識別碼,Microsoft Active Accessibility 伺服器實作可以與消費者介面自動化提供者實作並存。 由於通用控制項程式庫 (#A) 0 所實作的大部分標準 Windows 控制項和通用控制項不會實作 Microsoft Active Accessibility 或 消費者介面自動化,因此這些控制項通常不會處理WM_GETOBJECT訊息。 相反地,Microsoft Active Accessibility 或 消費者介面自動化 架構會檢查 Proxy 物件是否適用于特定 UI 元素。 否則,它會提供主視窗物件的預設 Proxy 物件。