Если wininet.dll пашет в асинхронном режиме, ставить хук на InternetSetStatusCallback, устанавливать свою функцию-обработчик сообщений (с возвратом в оригинальную), вести лог хендлов до InternetQueryDataAvailable, после того как все данные прочитаны она вернёт в callback INTERNET_STATUS_REQUEST_COMPLETE. Я знаю, это звучит даже не смешно. Можно проще - вести лог хендлов по интересующему url, перехватывая InternetConnect, HttpOpenRequest, HttpSendRequest, InternetQueryDataAvailable. По идее когда InternetQueryDataAvailable вернёт в lpdwNumberOfBytesAvailable NULL а возврат == 1 - мы прочитали страницу. К этому + баги при работе wininet в асинхронном режиме. Проще курить BHO.
wininet вообще со страницей не связан даже логически, это уровень HTTP,FTP/етц запросов, страницу грузит ИЕ. далее ее парсит mshtml как-то через задницу. БХО тут никак не нужно, нужны просто sink'и DWebBrowserEvents
Как перехватить колбек, ставлю хук на InternetSetStatusCallback, и он не работает. Керберос в логе не пишет вызова этой функции. Или он как-то с приколом перехватывается?))))
Смотри тему неподалёку, я с пытками пытаюсь выудить инфу у местных злодеев для "очередного ie-бота системного уровня", они не хотят делится знаниями... А один ещё пишет в подписи что "жидохек - могила" =) Вообщем иногда ie работает с wininet в асинхронном режиме, а иногда в обычном. Почему так и от чего зависит, выяснить не удалось.
Как уже говорил barton, достаточно подключится к экземпляру IE, и далее можно используя метод get_State() узнать загружена ли страница (READYSTATE_COMPLETE значит все ок) P.S. FreeCod'у превед (да здравствуют системные бот 0го уровня)