Invoke и beforenavigate2 нужна помощь
От: fromtodo  
Дата: 18.01.07 18:28
Оценка:
Приветствую,
перерыл весь 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.
Но как мне его получить ? Как получить код главного окна и фрэймов ?
Я не силен в С, точнее практически не знаю его, собирал код интуитивно, все работает, осталась только проблема с фрэймами.
Помогите пожалуйста кусочком кода !
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.