Приветствую,
перерыл весь rsdn — так и не смог решить свою проблему.
Суть:
Есть dll, которая перехватывает события IE. В частности OnBeforeNavigate2
Разбираю при помощи Invoke
Вот код:
if (dispidMember == DISPID_BEFORENAVIGATE2)
{
BSTR urlW = ((*pDispParams).rgvarg)[5].pvarVal->bstrVal;
CHAR urlA[MAX_PATH] = {0};
WideCharToMultiByte(CP_ACP, 0, (const BSTR)(urlW), -1, urlA, MAX_PATH, NULL, NULL);
urlW = ((*pDispParams).rgvarg)[3].pvarVal->bstrVal;
CHAR frameA[MAX_PATH] = {0};
WideCharToMultiByte(CP_ACP, 0, (const BSTR)(urlW), -1, frameA, MAX_PATH, NULL, NULL);
urlW = ((*pDispParams).rgvarg)[2].pvarVal->bstrVal;
CHAR postdateA[MAX_PATH] = {0};
WideCharToMultiByte(CP_ACP, 0, (const BSTR)(urlW), -1, postdateA, MAX_PATH, NULL, NULL);
urlW = ((*pDispParams).rgvarg)[1].pvarVal->bstrVal;
CHAR headersA[MAX_PATH] = {0};
WideCharToMultiByte(CP_ACP, 0, (const BSTR)(urlW), -1, headersA, MAX_PATH, NULL, NULL);
CViewSource::OnBeforeNavigate(urlA, frameA, headersA, postdateA);
}
.....
HRESULT CViewSource::OnBeforeNavigate(LPTSTR pszUrl, LPTSTR frameA, LPTSTR headersA, LPTSTR postdateA)
{
}
Как бороться с этим событием на fram'ах ? frameA не везде отрабатывает.
Как в этом коде определить — вызвал-ли его frame или основное окно?
Только не пинайте, прочитал все от и до. Нашел много всего по поводу сравнение pDisp.
Но как мне его получить ? Как получить код главного окна и фрэймов ?
Я не силен в С, точнее практически не знаю его, собирал код интуитивно, все работает, осталась только проблема с фрэймами.
Помогите пожалуйста кусочком кода !