首页 > 解决方案 > 使用纯 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"以验证该功能是否有效。我真的很感谢你的帮助。

标签: ccomui-automation

解决方案


在检查了相应的文档后,我找到了方法。我必须检索并传递 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)){
 
    }
  }
} 

推荐阅读