Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ура! Найден способ... ..как достать HTML из InternetExplorer ! 
:(
    Опции темы
mr.DUDA
  Дата 1.2.2004, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Вот, нашёл способ и спешу поделиться со всеми, как достать HTML-исходник открытой веб-страницы и вообще заставить IE делать что угодно - вплоть до написания Anti-Popup приложения thumbs-up.gif .

Step
, RAN, neutrino, как вы думаете - стоит добавлять тему в FAQ или нет ?..

Всё что нужно - это:
1) добавить в начало программы CoInitialize(0); или AfxOleInit();
2) в исходнике, там где нужно получить текст из окна IE, написать:
Цитата

// самое начало файла
#pragma warning(disable : 4192)
#pragma warning(disable : 4146)
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>

// ...........


// функция получает HWND, URL и HTML-текст из всех окон IE в системе
// результат - строка с собранной инфой
CString  InternetExplorerHook()
{
     CString strResult, strTemp;

     // получаем интерфейс IShellWindowsPtr
     SHDocVw::IShellWindowsPtr m_spSHWinds;
     if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
     {
          AfxMessageBox("Shell Windows interface is not avilable");
               return "Error !";
     }

     // идём по списку окон IE в системе
     IDispatchPtr spDisp;
     long nCount = m_spSHWinds->GetCount();
     for (long i = 0; i < nCount; i++)
     {
          _variant_t va(i, VT_I4);
          spDisp = m_spSHWinds->Item(va);

          SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
          if(spBrowser != NULL)
          {
               // тут начинается самое интересное
               long hWnd; spBrowser->get_HWND(&hWnd);
               BSTR strURL; spBrowser->get_LocationURL(&strURL);

               strTemp.Format("\r\nFound a new IE window (HWND = %x)\r\nURL = %s",
                                             hWnd, CString(strURL));
               strResult += strTemp;

               IDispatchPtr spDisp;
               if(spBrowser->get_Document(&spDisp) == S_OK && spDisp!= 0)
               {
                    MSHTML::IHTMLDocument2Ptr spHtmlDocument(spDisp);
                    MSHTML::IHTMLElementPtr spHtmlElement;
                    spHtmlDocument->get_body(&spHtmlElement);
                    if(spHtmlElement != 0)
                    {
                         BSTR bstr;
                         spHtmlElement->get_outerHTML(&bstr);
                         strResult += "\r\nHTML source of this page is:\r\n\r\n" +
                                             CString(bstr) + "\r\n\r\n\r\n";
                    }
               }
          }
     }

     // освобождаем IShellWindows
     m_spSHWinds.Release();

     return  strResult;
}



--------------------
user posted image
PM MAIL WWW   Вверх
Stalk
Дата 1.2.2004, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.1.2004
Где: Украина, харьков

Репутация: нет
Всего: нет



Круто!!! biggrin.gif Где нашел? Поделись линком!:)

Это сообщение отредактировал(а) Stalk - 1.2.2004, 17:34
PM MAIL ICQ   Вверх
mr.DUDA
Дата 1.2.2004, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



http://www.codeguru.com/ieprogram/enumIE.html

З.Ы. у меня глюкает под 98-й виндой на строке:
Цитата
spHtmlDocument->get_body(&spHtmlElement);

а в XP всё пучком...


--------------------
user posted image
PM MAIL WWW   Вверх
<Spawn>
Дата 1.2.2004, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



крута), тоже довно это интересовало меня.

Это сообщение отредактировал(а) <Spawn> - 1.2.2004, 21:04


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Stalk
Дата 1.2.2004, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.1.2004
Где: Украина, харьков

Репутация: нет
Всего: нет



Cool!!! Even more than I needed!!! hehe.gif
PM MAIL ICQ   Вверх
RAN
Дата 2.2.2004, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



А чего бы не добавить. Очень позновательно.
PM MAIL ICQ   Вверх
Step
Дата 2.2.2004, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA, добовлять полюбому, если бы ты еще и код сотворил который в ИЕ писать штмл будет, вообщебы круто было....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 2.2.2004, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
если бы ты еще и код сотворил который в ИЕ писать штмл будет, вообщебы круто было....

пжалста...

добавляем после строки:
Цитата
  strResult += "\r\nHTML source of this page is:\r\n\r\n" +
      CString(bstr) + "\r\n\r\n\r\n";

следующее:
Код
  if(CString(strURL) == "about:blank")
  {
     CString csNewText = "<body><br><br><br><br><br><br><table width=60% height=30% align=center style=\"border: 3px double #c0c0c0; background-color: #f0f0f0; font-family: MS Sans Serif; font-weight: bolder; font-size: xx-small\"><tr><td width=100% height=100% align=center valign=center>Винград - самый рульный форум !!!</td></tr></table></body>";

     BSTR bstr = csNewText.AllocSysString();
     spHtmlElement->put_innerHTML(bstr);
  }

и функция InternetExplorerHook() заменит содержимое всех окон, где URL - about:blank, на табличку с указанием какой форум самый рульный !!!

Почему спрашиваю насчёт FAQ - потому что в 98-ой винде прога категорически работать отказывается (ругается я написал где), как и пример с www.codeguru.com... Остальные примеры с того же сайта -- ещё менее работоспособные и более глючные...

Народ, помогите найти баг, плиз butbut.gif !!!!!!!!!!


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 2.2.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA, отвечаю почему размещать, вставляй только допиши что работает под тото..... а если программер граматный то сможет подделать и под 98, и я уверен что в 98 просто интерфейс чуть другой, и get_body(&spHtmlElement); както отличается, я посмотрю на досуке


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 2.2.2004, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



to all:
Проблема с Win98 снята !
Оказывается, просто при генерации исходников с пом. #import из WinXP, создаваемые 4 файла (mshtml.tlh/.tli и shdocvw.tlh/.tli), оставшись в директории "Debug", использовались потом и при генерации из Win98 (компилер просто не стал заменять их, считая что они сгенерированы из TLB/DLL, лежащих в Windows/System 98-ой винды, а на самом деле-то исходнички были просто несовместимы со старыми TLB/DLL !). Так что всё что нужно было сделать - это снести папку Debug, и откомпилировать проект заново!!! biggrin.gif biggrin.gif biggrin.gif

LOL


--------------------
user posted image
PM MAIL WWW   Вверх
mr.DUDA
Дата 2.2.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Странно, но скомпилированный под 98-ой виндой EXE-шник не работает в XP !
Скомпилированный под XP не работает под 98-ой -- это понятно: в XP-шке библиотеки новее, и т.п.
Но почему EXE, привязанный к старым DLL-кам (mshtml.dll и shdocvw.dll), не работает с новыми confused.gif ? В COM заложен принцип обратной совместимости, почему в этому случае он не срабатывает ?


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 3.2.2004, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA, не работает, или не находит новые дллки


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 3.2.2004, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
mr.DUDA, не работает, или не находит новые дллки

Не компилится или не запускается ?

З.Ы. запускать нужно в той же винде, под которой всё компилировалось, иначе ничего не получится. Я попробую написать пример без использования #import.


--------------------
user posted image
PM MAIL WWW   Вверх
Step
Дата 3.2.2004, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



mr.DUDA, это я у тебя спрашивал, по поводу совместимости, какая ошибка именно возникает.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
mr.DUDA
Дата 3.2.2004, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Находит все нужные длл-ки и запускается по любому, но когда доходит до строки
Цитата
spHtmlDocument->get_body(&spHtmlElement);

генерируется исключение. Причём если компилировать и запускать всё в одной версии винды, то ошибки нету. Если же, например, запустить скомпилированный под 98-й виндой EXE-шник из-под Win2000 или XP, то ошибка появляется. Или например если запустить из-под 98-ой винды файл скомпиленный в XP.


--------------------
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0891 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.