使用纯C检索UI元素的活动辅助功能名称

问题描述

目标:使用纯C检索UI元素的Microsoft活动可访问性名称

到目前为止,我的代码


iuiAutomationLegacyIAccessiblePattern *legacy = NULL;
BSTR element_aaname = NULL;

CoInitialize(NULL);
      
  EXTERN_C const CLSID CLSID_CUIAutomation;
  EXTERN_C const IID IID_iuiAutomation;

HRESULT hr = CoCreateInstance(&CLSID_CUIAutomation,NULL,CLSCTX_INPROC_SERVER,&IID_iuiAutomation,(void**)&pAutomation);

if(SUCCEEDED(hr)){
  hr = iuiAutomationLegacyIAccessiblePattern_get_CurrentName(legacy,&element_aaname);
    if(SUCCEEDED(hr)){
 
    }
  IUnkNown_Release(legacy);
  }

CoUninitialize();

问题:我没有任何价值,我想知道如何分配element_aaname="Not found"来验证函数是否起作用。非常感谢您的帮助。

解决方法

在检查了相应的文档后,我找到了方法。我必须检索并传递Ui元素,这样我才能检索LegacyIAccessible.Name:

IUIAutomation *pAutomation = NULL;
IUIAutomationElement *element = NULL;
BSTR element_aaname = NULL;

CoInitialize(NULL);
      
  EXTERN_C const CLSID CLSID_CUIAutomation;
  EXTERN_C const IID IID_IUIAutomation;

HRESULT hr = CoCreateInstance(&CLSID_CUIAutomation,NULL,CLSCTX_INPROC_SERVER,&IID_IUIAutomation,(void**)&pAutomation);

if(SUCCEEDED(hr)){
  GetCursorPos(&pt);
  hr = IUIAutomation_ElementFromPoint(pAutomation,pt,&element);
  if(SUCCEEDED(hr) && element != NULL){ 
    hr = IUIAutomationLegacyIAccessiblePattern_get_CurrentName(element,&element_aaname);
    if(SUCCEEDED(hr)){
 
    }
  }
}