Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Hello, World!
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 22:52 Geo
 
 
Во Флориде и в Королевстве сейчас  23:02[Войти] | [Зарегистрироваться]

Обсуждение материала
Как запустить Internet Explorer или подключиться к нему.
Полный текст материала


Другие публикации автора: Сергей Осколков

Цитата или краткий комментарий:

«... В продолжение нескольких статей на Королевстве о работе с компонентом TWebBrowser хочу затронуть пару вопросов работы с Internet Explorer, которые раньше, кажется, не обсуждались. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]675%
 
  Ничего особенно нового и интересного
[2]225%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 8

Оценка стиля изложения

  Все понятно, материал читается легко
[1]685.7%
 
  Есть неясности в изложении
[2]114.3%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 7




Смотрите также материалы по темам:
[TWebBrowser] [Интеграция с Internet Explorer]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 27

26-06-2020 06:32
Спасибо, получается все. А как узнать, что страничка загрузилась полностью?
OnDocumentComplete срабатывает и после того, как ReadyState стало =4


15-12-2009 04:42
сообщение от автора материала
его через сообщение передал, однако получил аксекс сразу,
WebBrowser.ControlInterface - это же указатель на интерфейсную переменную в адресном пространстве одной задачи, понятно, что в другом процессе этот указатель не получится использовать. А в COM еще сложнее, если сервер вне вашего процесса, то COM создает некое прокси и дает указатель на него.
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1359
Первая мысль у меня была для идентификации WebBrowser использовать дескриптор окна (Handle), но IWebBrowser2.Hwnd, как пишут, можно использовать для IE, а для WebBrowser дескриптор окна мы так получить не можем. В интернете и даже на сайте microsoft есть материалы, как получить handle (я искал WebBowser.Hwnd)
http://support.microsoft.com/kb/244310
Но первый вариант для C++, приведенный тут, у меня сходу не получился, а дальше копать я не стал. Попробуйте задать свой вопрос на Круглом Столе. Тут много квалифицированных прогрммистов, м.б. кто-то поможет. )


15-12-2009 02:34
Обе программы мои, в одной есть TWebBrowser  в другой компонент из этой статьи http://delphiworld.narod.ru/base/ie_intercept_msgs.html

Зачем так сложно не спрашивайте, это пока исследование.

Про WebBrowser.ControlInterface  я тоже сначала подумал и тупо его через сообщение передал, однако получил аксекс сразу, потом написал быдлокодерский кусочек


  Caption :=  inttostr(Integer(Pointer(WebBrowser1.ControlInterface))) + ' ' +
              inttostr(Integer(Pointer(WebBrowser1.ControlInterface.Parent))) + ' ' +
              inttostr(Integer(Pointer(WebBrowser1.ControlInterface.Document))) + ' ' +
              inttostr(Integer(Pointer(WebBrowser1.ControlInterface.Container))) + ' ' +
              inttostr(Integer(Pointer(WebBrowser1.ControlInterface.Application)));



а вдругом приложении


          tmp := inttostr(integer(Pointer(pvWeb2.Application)));
          tmp := tmp + ' ' + inttostr(integer(Pointer(pvWeb2)));
          tmp := tmp + ' ' + inttostr(integer(Pointer(pvWeb2.Container)));
          tmp := tmp + ' ' + inttostr(integer(Pointer(pvWeb2.Parent)));
          tmp := tmp + ' ' + inttostr(integer(Pointer(pvWeb2.Document)));



совпадений не нашлось.

ЗЫ Заметил такую вещь - если TWebBrowser.RegistryAsBrowser := false то CoShellWindows не видет это окно, отсюда предположение что когда этот TWebBrowser Регистрируется создается еще какойто ком объект который мы как раз и получаем из ShellWindows, и если мое предположение верно то необходимо из TWebBrowser както это интерфейс получить  


15-12-2009 02:21
сообщение от автора материала
Честно говоря, я не совсем понял ситуацию, кто обращается - Ваша программа с TWebBrowser к другой или наоборот, та к этой.  вообще интерфейс, который вы получаете через IShellWindows, это ведь тот самый интерфейс, который в самой программе получается как WebBrowser.ControlInterface.


15-12-2009 01:12
Другими словами как свой TWebBrowser целенаправленно дать в использование другому приложению.


15-12-2009 01:09
А как решить такую задачу.
В моем приложении есть TWebBrowser его свойство RegistryAsBrowser := true и поэтому его можно найти CoShellWindows, одноко как мне убедиться в том что найженный там браузер именно он. Сравнение по различного рода урлам и неймам это не вариант, нужен интерфейс или указатель или еще чего.
Моя проблема решилась бы другим путем если бы знать как из компонента TWebBrowser получить тот же интерфейс что получается из CoShellWindows, я бы тогда его на прямую передавал.


20-08-2009 05:07
сообщение от автора материала
P.S. Естественно, то, что я написал, относится только к отслеживанию навигации в IE. Навигация в других браузерах так отслеживаться не будет. Вообще для отслеживания навигации в сети используются другие средства.


20-08-2009 04:36
сообщение от автора материала
to malor.
Из общих рекомендаций - такой программе нужно будет реагировать на то, что пользователь перешел на новую страницу и,  добавлять при этом новый URL в журнал. Т.е. программа должна реагировать на события COM-сервера. Интерфейсам IShellWindows и IWebBrowser2 соответствуют интерфейсы событий DShellWindowsEvents и DWebBrowserEvents2 соответственно, объявлены они в модуле ShDocVw.
Что-то на эту тему есть в статье http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1319
там в примере можно посмотреть, как клиент может обрабатывать события сервера.
Если будут более конкретные вопросы по вашей задаче, задавайте пожалуйста на Круглом столе, м.б. там кто-нибудь ответит. Если хотите более-менее готовое решение, то наверное стоит писать об этом на Городской площади:
http://www.delphikingdom.ru/notice/


19-08-2009 12:28
Как использовать сведения статьи, например, для отслеживания введенных в IE в адресную строку URL'ов ?

Программа должна функционировать независимо от браузера и заниматься лишь регисрацией сведений(т.е. URL).


01-08-2007 06:46
сообщение от автора материала
В Viste c IE 7.0 код

...

не работает - в списке Winds присутствуют только окна Explorer-a, окон IE там нет!

В Windows XP SP2 с установленным IE7 этот код работает. Могу предположить, что то, про что вы написали, как-то связано с тем, что в Висте IE 7.0 работает в защищенном режиме (protected mode).


26-07-2007 14:22
В Viste c IE 7.0 код

procedure TForm1.Button1Click(Sender: TObject);
var
  Winds: IShellWindows;
  IEWB: IWebBrowser2;
  i: integer;
  Doc: IHtmlDocument2;}
begin
  {lb.Items.Clear;
  Winds:=CoShellWindows.Create;
  for i:=0 to Winds.Count-1 do
    if (Winds.Item(i) as IWEbBrowser2).Document<>nil then
    begin
      IEWB:=Winds.Item(i) as IWEbBrowser2;
      if IEWB.Document.QueryInterface(IhtmlDocument2, Doc)= S_OK
        then lb.Items.Add(Doc.url);
    end;
end;


не работает - в списке Winds присутствуют только окна Explorer-a, окон IE там нет!


02-02-2007 04:17
Супер!


26-06-2006 01:32
сообщение от автора материала
P.S. На самом деле в Дельфи это делается без единой строчки кода :) . Достаточно при импорте библиотеки типов позволить мастеру сгенерировать компонент-обертку.


24-06-2006 11:34
Кто то еще знает как подключится к событиям броузера ?


23-06-2006 09:13
сообщение от автора материала
Меня пару раз по почте, теперь в обсуждении статьи, просили привести пример или код, как подключиться к событиям уже запущенного IE. Один раз я послал кусок кода, как подключиться к DShellWindowsEvents. Но дело в том, что подключаясь к событиям IE, можно перехватывать отсылаемые данные форм. Вот фраза из одной статьи, где это описано на С++: "Задача - перехватить данные форм IE непосредственно перед отправкой их на сервер через протоколы http и https." Однажды на Городской площади было предложение работы, где, как оказалось, требовалось именно это. Зачем можно перехватывать данные формы, которые посылает пользователь на какой-нибудь сайт, можно догадываться, варианты могут быть разными. Из тех соображений, что это можно использовать для перехвата личных данных, паролей и т.п., я не буду приводить здесь этот код. Пусть меня извинят те, кто планировал использовать его в "мирных" целях. В конце концов задача не такая сложная - как реализовать сток для событий COM, описано в статьях А.Тенцера и в других местах.


23-06-2006 07:13
Отличная статья.
Очень хотелось бы узнать как подключиться к событиям запущенного IE. В частности беспокоят события OnBeforeNavigate и OnNavigateComplete2.



14-12-2005 08:51
Супер!
Искал пример хотябы на С++ нашёл сразу на Д7!

Если будет время сделаю сампл.
Кому выслать?

2-я часть статьи отличная!

( TWebBrowser надоел :) - хотелось чегото остреньокого )


20-05-2005 07:01
шо,шо такое не че не понял хлопьци


18-05-2005 11:01
За линки спасибо. Проблему пока решить не удалось, но критическая масса накопленной информации наверное скоро будет достигнута. В продолжение дискусии должен заметить следующее:

>>Насколько я понимаю, событий у окна браузера или у документа при этом не возникает.

Это точно. Вернее сказать, события то возникают, а словить их не удается.

>>Контролировать загрузку отдельных рисунков и выполнение отдельных скриптов, мне кажется, нельзя

А мне кажется, что можно. Взять хотя бы AD-охотник из MYIE. Раз он умеет, то значит это возможно. База то одна и та же - движок MSIE.


18-05-2005 03:54
сообщение от автора материала
Предыдущее сообщение - мое.


18-05-2005 03:52
В частности у меня не получилось перехватить загрузку внешнего скрипта или рисунка.
Насколько я понимаю, событий у окна браузера или у документа при этом не возникает. Контролировать загрузку отдельных рисунков и выполнение отдельных скриптов, мне кажется, нельзя (Насчет скриптов не уверен, какие-то ведь могут выполняться при загрузке, а другие при нажатии на кнопки и т.д.). Чтобы разрешать/запрещать загрузку картинок и выполнение скриптов в целом, нужно в методе IDispatch.Invoke WebBrowser'а реализовать обработку DispID=DISPID_AMBIENT_DLCONTROL.
http://msdn.microsoft.com/workshop/browser/hosting/wbcustomization.asp#Controlling_Download_and_Execution
Пример реализации (с исходниками):
http://www.euromind.com/iedelphi/embeddedwb.htm

Если скрипт выполняется не сразу, то, наверное, можно после загрузки документа его заменить через
IHTMLScriptElement.

Не написал в статье, что про использование интерфейса IShellWindows для подключения к IE прочитал в первый раз в статье Т. Чадова на RSDN (конечно, это есть и на MSDN и в других местах), там везде примеры для C++.
Сообщение не подписано


17-05-2005 16:36
Материал отличный, но малость "недоразжеван". При использовании стандартных известных из TWebBrowser событий проблем не возникает, но вот как только начинается реальная практика - сразу проблемы. В частности у меня не получилось перехватить загрузку внешнего скрипта или рисунка. Т.е. на странице есть фрагмент типа

<script src=http://domain/name.js></script>

Как подменить или хотя бы просто отменить загрузку этого скрипта средствами IWEbBrowser2 в чужом окне IE (хотя можно и в своем - не суть важно)?




17-05-2005 11:05
сообщение от автора материала
<> на <>
Смешно. Второй символ & потом lt; потом & потом gt; (как в примере в статье). Заменяется на html-странице на <>. В предыдущем сообщении автоматом заменился.


17-05-2005 11:01
сообщение от автора материала
illegial Character &
Я просмотрел, что html-редактор заменил символы <> на <> (для html это одно и то же) внутри тега <pre>. Наверное, вы просто пример скопировали. Думаю, что причина в этом, нужно просто исправить на <>.


17-05-2005 08:44
У меня пишет ошибку при компиляции
if (Winds.Item(i) as IWEbBrowser2).Document<>nil then  ......

illegial Character &
Сообщение не подписано


10-05-2005 19:02
>>>Отличный материал.
Ну да. Для ознакомления.
Честно говоря не могу придумать практическое применение браузера в дельфи.


07-05-2005 09:49
Отличный материал.


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
"Мы с тобой одной крови — ты и я!". Чьи это заветные слова?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования