我给点代码参考一下,
这个例子能拦截到你的那个按钮的点击事件,
不过有时候行,有时候不行, 我也郁闷,
而且对于 Maxthon 浏览器,
似乎只能拦截浏览器第一个打开的窗口
对于操作系统的IE 倒是都能拦截,
第一次还可以,但再试就不行了
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ShellAPI, SHDocVw, WebEvent;
type
TForm1 = class(TForm)
Memo1: TMemo;
Timer1: TTimer;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure WebBtnClick(Sender: IWebBrowser;
event: OleVariant; SrcElement: OleVariant);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
procedure MyDeal(var Message: TMessage); message WM_USER+1023;
public
{ Public declarations }
eh: TWebEvent;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
iw: IShellWindows;
i: Integer;
id: IDispatch;
ib: IWebBrowser;
begin
iw := CoShellWindows.Create;
for i := 0 to iw.Count - 1 do
begin
id := iw.Item(i);
if Supports(id, IWebBrowser, ib) then
begin
eh.EvtSource := ib;
eh.AttachEvents;
Memo1.Lines.Add(
Format('attach to: %s', [ib.LocationURL]));
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
eh := TWebEvent.Create(Self);
eh.OnEvent := WebBtnClick;
eh.EventsToFire := 'onclick';
eh.StandardTags := 'input';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
eh.Free;
end;
procedure TForm1.WebBtnClick(Sender: IWebBrowser;
event: OleVariant; SrcElement: OleVariant);
begin
//
PostMessage(Handle, WM_USER+1023, 0, 0);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
ShellExecute(Handle, 'open', PChar(Edit1.Text),
nil, nil, SW_SHOWMAXIMIZED);
end;
end;
procedure TForm1.MyDeal(var Message: TMessage);
begin
Memo1.Lines.Add('click in explorer');
end;
end.