Проблема заключается в том, что я хочу получить значение дескриптора новой вкладки, созданной здесь.
По умолчанию, когда вы получаете значение дескриптора pWebBrowser2, оно попадает в качестве основного дескриптора текущего окна., а не уникальная ручка новой ручки.
Здесь есть одно рабочее условие.Инструменты IE -> Свойства обозревателя -> Общие -> Параметры вкладки -> Должно быть включено всегда открытое всплывающее окно в новом окне.
Всегда открывать всплывающее окно в новом окне Из-за настройки вновь открытое окно работает как отдельноеprocess.
Проблема в том, что вы не должны получать значение дескриптора после всплывающего окна, но мне нужно знать значение дескриптора до Navigate2.
Если вы предоставляете базовый файл примера длячтобы решить проблему, мы будем поддерживать $ 500 с PayPal.
CString strUrl = _T("http://www.google.com");
CoInitialize(NULL);
HINSTANCE hInst = ::LoadLibrary(_T("OLEACC.DLL"));
if (hInst != NULL)
{
if (hwnd)
{
CComPtr<IHTMLDocument2> spDoc;
LRESULT lRes;
UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
::SendMessageTimeout(hwnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes);
HRESULT hr = ::ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, (void**)&spDoc);
if (SUCCEEDED(hr))
{
CComPtr<IHTMLWindow2> spWnd2;
hr = spDoc->get_parentWindow((IHTMLWindow2**)&spWnd2);
if (SUCCEEDED(hr))
{
CComPtr<IServiceProvider> spServiceProv;
hr = spWnd2->QueryInterface(IID_IServiceProvider, (void**)&spServiceProv);
if (SUCCEEDED(hr))
{
IWebBrowser2* pWebBrowser2 = 0;
hr = spServiceProv->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void**)&pWebBrowser2);
if (SUCCEEDED(hr))
{
// Here IWebBrowser2 makes navigate2 as a new tab.
VARIANT vtUrl;
VariantInit(&vtUrl);
vtUrl.vt = VT_BSTR;
vtUrl.bstrVal = strUrl.AllocSysString();
VARIANT vFlags;
V_VT(&vFlags) = VT_I4;
V_I4(&vFlags) = navOpenInNewWindow;
VARIANT vEmpty;
VariantInit(&vEmpty);
pWebBrowser2->Navigate2(&vtUrl, &vFlags, &vEmpty, &vEmpty, &vEmpty);
VariantClear(&vtUrl);
VariantClear(&vFlags);
VariantClear(&vEmpty);
pWebBrowser2->Release();
}
spServiceProv.Release();
}
spWnd2.Release();
}
spDoc.Release();
}
}
::FreeLibrary(hInst);
}
CoUninitialize();
По сути, когда вы получаете значение дескриптора pWebBrowser2, оно попадает в качестве основного дескриптора текущего окна, а не уникального дескриптора нового дескриптора..