[C++] Get Chrome Url

Katılım
16 Temmuz 2020
Mesajlar
1.239
Makaleler
12
Çözümler
8
Daha fazla  
Cinsiyet
Erkek
Meslek
Software Developer

ChromeUrl​

Gets the Url on the Active Tab

C++:
DWORD WINAPI GetChromeUrl(LPVOID lpParameter) {
    int RetInitializeEx = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    while (true) {
        if (!IsWindowVisible(ChromeWidgetHwnd) && GetWindowTextLength(ChromeWidgetHwnd) == 0) {
            break;
        }
        CComPtr<IUIAutomation> Automation;
        if SUCCEEDED(Automation.CoCreateInstance(CLSID_CUIAutomation)) {
            CComPtr<IUIAutomationElement> Root;
            if (SUCCEEDED(Automation->ElementFromHandle(ChromeWidgetHwnd, &Root))) {
                CComPtr<IUIAutomationElement> Pane;
                CComPtr<IUIAutomationCondition> PaneCondition;
                Automation->CreatePropertyCondition(UIA_ControlTypePropertyId, CComVariant(UIA_PaneControlTypeId), &PaneCondition);
                CComPtr<IUIAutomationElementArray> ElementArray;
                if (FAILED(Root->FindAll(TreeScope_Children, PaneCondition, &ElementArray))) {
                    break;
                }
                int Count = 0;
                ElementArray->get_Length(&Count);
                for (int i = 0; i < Count; i++) {
                    CComBSTR name;
                    if (SUCCEEDED(ElementArray->GetElement(i, &Pane))) {
                        if (SUCCEEDED(Pane->get_CurrentName(&name))) {
                            if (wcscmp(name, L"Google Chrome") == 0) {
                                break;
                            }
                        }
                    }
                    Pane.Release();
                }
                if (!Pane) {
                    break;
                }
                CComPtr<IUIAutomationElement> Url;
                CComPtr<IUIAutomationCondition> UrlCondition;
                Automation->CreatePropertyCondition(UIA_ControlTypePropertyId, CComVariant(UIA_EditControlTypeId), &UrlCondition);
                if (FAILED(Pane->FindFirst(TreeScope_Descendants, UrlCondition, &Url))) {
                    break;
                }
                CComVariant Variant;
                if (FAILED(Url->GetCurrentPropertyValue(UIA_ValueValuePropertyId, &Variant))) {
                    break;
                }
                if (!Variant.bstrVal) {
                    break;
                }
                _bstr_t ConvertString = _bstr_t(Variant.bstrVal);
                char* Data = new char[ConvertString.length()];
                strcpy_s(Data, ConvertString.length() + 1, ConvertString);
                CurrentUrl = Data;
            }
            Automation.Release();
        }
        CoUninitialize();
    }
    return 0;
}

Source​

ChromeUrl
 

Geri
Yukarı