win32-UI Automation

2021-03-05 13:25

阅读:759

标签:error:   ini   type   ext   window   windows   void   error   color   

使用UI Automation遍历窗口的所有控件标题和类

#include 
#include 
#include 

IUIAutomation* pClientUIA;
IUIAutomationElement* pRootElement;

void FindControl(const long controlType)
{
    HRESULT hr;
    BSTR name;
    IUIAutomationCondition* pCondition;
    VARIANT varProp;
    varProp.vt = VT_I4;
    varProp.uintVal = controlType;
    hr = pClientUIA->CreatePropertyCondition(UIA_ControlTypePropertyId, varProp, &pCondition);
    if (S_OK != hr)
    {
        printf("CreatePropertyCondition error: %d\n", GetLastError());
    }

    IUIAutomationElementArray* pElementFound;
    hr = pRootElement->FindAll(TreeScope_Subtree, pCondition, &pElementFound);
    if (S_OK != hr)
    {
        printf("CreatePropertyCondition error: %d\n", GetLastError());
    }
    int eleCount;
    pElementFound->get_Length(&eleCount);
    for (int i = 0; i )
    {
        IUIAutomationElement* pElement;
        hr = pElementFound->GetElement(i, &pElement);
        if (S_OK != hr)
        {
            printf("CreatePropertyCondition error: %d\n", GetLastError());
        }
        hr = pElement->get_CurrentName(&name);
        if (S_OK != hr)
        {
            printf("CreatePropertyCondition error: %d\n", GetLastError());
        }
        wprintf(L"Control Name: %s\n", name);
        hr = pElement->get_CurrentClassName(&name);
        if (S_OK != hr)
        {
            printf("CreatePropertyCondition error: %d\n", GetLastError());
        }
        wprintf(L"Class Name: %s\n", name);
    }
}

int main()
{
    HRESULT hr = CoInitializeEx(NULL, COINITBASE_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
    if (S_OK != hr)
    {
        printf("CoInitializeEx error: %d\n", GetLastError());
        return 1;
    }

    hr = CoCreateInstance(CLSID_CUIAutomation, NULL, CLSCTX_INPROC_SERVER, IID_IUIAutomation, reinterpret_castvoid**>(&pClientUIA));
    if (S_OK != hr)
    {
        printf("CoCreateInstance error: %d\n", GetLastError());
        return 1;
    }


    HWND hwnd = (HWND)0x00030AF6;
    if (hwnd == NULL)
    {
        printf("FindWindow error: %d\n", GetLastError());
        return 1;
    }

    hr = pClientUIA->ElementFromHandle(hwnd, &pRootElement);
    if (S_OK != hr)
    {
        printf("ElementFromHandle error: %d\n", GetLastError());
        return 1;
    }

    FindControl(UIA_TextControlTypeId);
}

 

win32-UI Automation

标签:error:   ini   type   ext   window   windows   void   error   color   

原文地址:https://www.cnblogs.com/strive-sun/p/12895954.html


评论


亲,登录后才可以留言!