问题描述
目标:使用纯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)){
}
}
}