Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как перехватить клик по ссылке?


Автор: Benedict 23.6.2003, 12:52
Господа ,подскажите плиз, как можно организовать мониторинг клика по ссылке и перехват этой ссылки?

Тоесть, есть окно браузера (IE), есть програмулинка. Пользователь щелкает в браузере по ссылке, поргамуля ловит эту ссылку и после сравнения либо выдает сообщение либо ждет следующего клика.

Все казалось бы просто, но ни где не могу найти информации как реализовать сам мониторинг и перехват нажатой ссылки. confused.gif

Буду благодарен за советы.

Автор: <Spawn> 23.6.2003, 16:29
Может хуком на мышку?

Автор: Guest_Benedict 24.6.2003, 16:20
И это весь ответconfused.gif господа, плиз, как для чайника, если можно. :о(((( Ибо ни один уважающий себя программер не смог мне дать ответа... а таковых было уже человек 10

Автор: eof 24.6.2003, 18:04
<Spawn> а как узнать, что клик произошел над ссылкой? как узнать адрес ссылки?
Плохо знаю как все это барахло работает (IE имеется в виду), но могу для того что бы было где копать предложить вариант:
Написать самому браузер (...\DelphiN\Demos\CullStuf\...), у компонента WebBrowser1 использовать событие BeforeNavigate2...
Вариан конечно так себе, но мне кажеться, что если порыть исходники, то можно чтонить найти.

Автор: Fantasist 26.6.2003, 02:32
Можно подключиться к запущенному IE, и через его интерфейсы получить это событие. В двух словах принцип простой: GetActiveObject("IE_GUID") -> QueryInterface("Нужный интерфейс"). Более подробно - лень. Только есть нюансов много: надо отлавливать запуск IE, пользователь может пользоваться другим браузером. В принципе, хук на мышку тоже решение, определит что это ссылка можно по формату строки, над которым мышка находиться, но этот линк может быть открыт в notepad для редактирования и тогда клик по нему вовсе не означает переход по нему. Вобщем, задача не такая тривиальная.

Автор: Benedict 26.6.2003, 03:29
GetActiveObject("IE_GUID") -> QueryInterface("Нужный интерфейс")
1. QueryInterface - Это что?
2. А какой именно нужный или где почитать об интерфейсах?
3. Именно IE все остальное не интересует. И точно известно, что он запущен... Но вот окон может быть несколько. Как тут быть?

А вообще, огромное спасибо.

Автор: <Spawn> 26.6.2003, 14:41
QueryInterface - метод интрфейса IUnknown, который используется для получения клиентом ссылок на интерфейс. А вообще, если тебе хочется получше разобраться в технологии COM, то прикупи книжечку "Delphi 6 и технология COM" авторов Н. Елманова, С. Трепалин, А. Тенцер из которой я и взял данное определение.

Автор: Fantasist 28.6.2003, 04:58
В общем, для тех у кого Делфи 7.

Код

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ActiveX, ComObj, StdCtrls, OleCtrls, SHDocVw;


type

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   procedure BeforeNavigate(Sender: TObject; var pDisp: OleVariant;
                        var URL: OleVariant;
                        var Flags: OleVariant;
                        var TargetFrameName: OleVariant;
                        var PostData: OleVariant;
                        var Headers: OleVariant;
                        var Cancel: OleVariant);
 end;

var
 Form1: TForm1;
 IE: TInternetExplorer;

implementation

{$R *.dfm}

procedure TForm1.BeforeNavigate(Sender: TObject; var pDisp, URL, Flags,
 TargetFrameName, PostData, Headers, Cancel: OleVariant);
begin
 ShowMessage(URL);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ifc:IUnknown;
begin
 IE:=TInternetExplorer.Create(self);
 GetActiveObject(ProgIDToClassID('InternetExplorer.Application'),nil,ifc);
 IE.ConnectTo(ifc as IWebBrowser2);
 IE.OnBeforeNavigate2:=BeforeNavigate;
end;


Ежели Делфи 6 или 5, то TInternetExplorer можно заменить на TWebBrowser

Автор: Mikel 28.6.2003, 12:48
Можно ещё попробовать капнуть в направлении качалок. Там есть скрипт, который определяет запустить ему качалку, или пропустить дальше.

Автор: Benedict 28.6.2003, 22:54
Цитата(Fantasist @ 28.6.2003, 04:58)
В общем, для тех у кого Делфи 7.

Код

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ActiveX, ComObj, StdCtrls, OleCtrls, SHDocVw;

 
************* Скипед ***********

end;


Ежели Делфи 6 или 5, то TInternetExplorer можно заменить на TWebBrowser

Прости, а что это? Как это расшифровать? Не мог бы ты описание добавить к коду?
Заранее спасибо.

Автор: Fantasist 30.6.2003, 16:54
А что тут не понятного? TWebBrowser (TInternetExplorer) - это обертка над COM интерфейсами, которые предоставляет IE. C помощью GetActiveObject, нажодим запущенный экземпляр IE, и если он есть, подключаем его к обертке. Далее, используя эту обертку, вешаем обработчик на событие OnBeforeNavigate. Это, конечно, не отлов клика по ссылке, но почти.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)