Wininet / Как узнать что страница загружена

Тема в разделе "WASM.WIN32", создана пользователем Selah, 17 окт 2008.

  1. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    По каким функциям в вининет можно узнать что браузер уже загрузил и отобразил все данные?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Если речь идет о IE, то DISPID_NAVIGATECOMPLETE2.
     
  3. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Да, о IE
     
  4. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Как его ловить без BHO
     
  5. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    можно узнать внимательным чтением msdn, раздела посвещенного wininet
     
  6. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    если ты знаешь что там описан мой сабж, то так и скажи, если нет, то лучше ничего не пиши
     
  7. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Если wininet.dll пашет в асинхронном режиме, ставить хук на InternetSetStatusCallback, устанавливать свою функцию-обработчик сообщений (с возвратом в оригинальную), вести лог хендлов до InternetQueryDataAvailable, после того как все данные прочитаны она вернёт в callback INTERNET_STATUS_REQUEST_COMPLETE.

    Я знаю, это звучит даже не смешно.
    Можно проще - вести лог хендлов по интересующему url, перехватывая InternetConnect, HttpOpenRequest, HttpSendRequest, InternetQueryDataAvailable. По идее когда InternetQueryDataAvailable вернёт в lpdwNumberOfBytesAvailable NULL а возврат == 1 - мы прочитали страницу. К этому + баги при работе wininet в асинхронном режиме. Проще курить BHO.
     
  8. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Freecod спасибо
     
  9. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    wininet вообще со страницей не связан даже логически, это уровень HTTP,FTP/етц запросов, страницу грузит ИЕ.
    далее ее парсит mshtml как-то через задницу. БХО тут никак не нужно, нужны просто sink'и DWebBrowserEvents
     
  10. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    Как перехватить колбек, ставлю хук на InternetSetStatusCallback, и он не работает. Керберос в логе не пишет вызова этой функции.
    Или он как-то с приколом перехватывается?))))
     
  11. Freecod

    Freecod New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2006
    Сообщения:
    136
    Смотри тему неподалёку, я с пытками пытаюсь выудить инфу у местных злодеев для "очередного ie-бота системного уровня", они не хотят делится знаниями... А один ещё пишет в подписи что "жидохек - могила" =)

    Вообщем иногда ie работает с wininet в асинхронном режиме, а иногда в обычном. Почему так и от чего зависит, выяснить не удалось.
     
  12. Selah

    Selah New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2007
    Сообщения:
    258
    т.е. InternetSetStatusCallback он не всегда юзает?
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Как уже говорил barton, достаточно подключится к экземпляру IE, и далее можно используя метод get_State() узнать загружена ли страница (READYSTATE_COMPLETE значит все ок)

    P.S. FreeCod'у превед (да здравствуют системные бот 0го уровня)