如何获取浏览器标题及地址的问题

天火 2011-10-18 10:26:50
1、如果只是获取当前的网页地址就不用说了】


如何获取所有打开的网页的地址?以IE为例,一个浏览器,但有N个标签,每个标签都是一个打开的网页,那么怎么把所有的网页地址同时得到呢?
是同时所有!
是同时所有!
是同时所有!
是同时所有!
是同时所有!
是同时所有!


如果觉得分少,可以另开贴再加,只要能回答满意。

邮箱:1192680827@qq.com
...全文
121 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天火 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
DDE
[/Quote]

从你回答的别人的问题知道了答案,我找了好长时间的答案,原来几行就能搞定........谢谢!
天火 2011-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
DDE
[/Quote]

从你回答的别人的问题知道了答案,我找了好长时间的答案,原来几行就能搞定........谢谢!
znkee 2011-10-19
  • 打赏
  • 举报
回复
还有一种方法,只适合IE内核。

Using IShellWindows

Click Button1 to have the locationurls from all running instances of Internet Explorer - including open folders and Windows Explorer - shown in a listbox.

uses
shdocvw_tlb;

procedure TForm1.Button1Click(Sender: TObject);
var
x: Integer;
Sw: IShellWindows;
begin
sw := CoShellWindows.Create;
for x := 0 to SW.Count - 1 do
Listbox1.Items.Add((Sw.Item(x) as IWebbrowser2).LocationUrl);
end;


Sinking events from IShellWindows.

DShellWindowsEvent has two events OnWindowRegistered (called when a new instance of IE is created) and OnWindowRevoked (called whel an instance of IE is closed).

Drop a DShellWindowEvent-component on your form and connect it to your instance of IShellwindows:

var
sw : Ishellwindows;

begin
sw := CoShellWindows.Create;
DshellwindowsEvents1.Connect(sw);
end;



The following code will keep track of running instances of Internet Explorer - add or remove them from a listbox based on information from OnWindowRegistered and OnWindowRevoked

uses
shdocvw_tlb;


procedure TForm1.DShellWindowsEvents1WindowRegistered(Sender: TObject;lCookie: Integer);
begin
Listbox1.Items.Add( 'Instance with Cookie no: '+InttoStr(lCookie));
end;

procedure TForm1.DShellWindowsEvents1WindowRevoked(Sender: TObject;lCookie: Integer);
begin
Listbox1.Items.Delete(Listbox1.Items.IndexOf( 'Instance with Cookie no: '+InttoStr(lCookie)));
end;

procedure TForm1.FormCreate(Sender: TObject);
var
sw : Ishellwindows;
begin
FormStyle:=fsStayOnTop;
sw := CoShellWindows.Create;
DshellwindowsEvents1.Connect(sw);
end;




Sending commands to a running instance of IE

You can obtain an IWebbrowser2-interface from each of the running instances listed in IShellwindows by simple typecasting if

WB:=Shellwindows.Items(x) as IWebbrowser2;


The following code will close all running instances of IE when Button1 is clicked:


procedure TForm1.Button1Click(Sender: TObject);
var
x : Integer;
sw: Ishellwindows;
wb: IWebbrowser2;
begin
sw := CoShellWindows.Create;
for x := 0 to sw.count do
begin
WB := Sw.Item(x) as IWebbrowser2;
if wb <> nil then WB.Quit;
end;
end;




Sinking Events from a running instance of IE.

Drop a DWebbrowserEvents2-component on your form and connect it to an instance of IE by using

DWebbrowserEvents21.Connect(IE);


var
ShellWin : shdocvw_tlb.IShellWindows;
IE : IWebbrowser2;

begin
IE:=shellwin.Item(Shellwin.Count-1) as IWebbrowser2;
DWebbrowserEvents21.Connect(IE);
end;



The following code opens a new instance of IE, lets it navigate and captures the statustext-change in a listbox:

uses
shdocvw_tlb;

procedure TForm1.Button1Click(Sender: TObject);
var
x: Olevariant;
sw: Ishellwindows;
wb: IWebbrowser2;
begin
WB := CoInternetExplorer.Create;
WB.Visible := True;
DWebbrowserEvents21.Connect(WB);
WB.Navigate( 'http://www.euromind.com/iedelphi ', x, x, x, x);
end;

procedure TForm1.DWebBrowserEvents21StatusTextChange(Sender: TObject;const Text: WideString);
begin
listbox1.items.add(text);
end;

procedure TForm1.DWebBrowserEvents21Quit(Sender: TObject);
begin
DWebbrowserEvents21.DisConnect;
end;




The demo LogView demonstrates how to log events from all running instances of IE to a common log-listbox. The demo uses DWebbrowserEvents2 and ShellWindowEvents:




var
ShellWin: IShellWindows; //NB!!
Connection: Integer;

procedure InterfaceConnect(const Source: IUnknown; const IID: TIID;
const Sink: IUnknown; var Connection: Longint);
var
CPC: IConnectionPointContainer;
CP: IConnectionPoint;
begin
Connection := 0;
if Succeeded(Source.QueryInterface(IConnectionPointContainer, CPC)) then
if Succeeded(CPC.FindConnectionPoint(IID, CP)) then
CP.Advise(Sink, Connection);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
X: Integer;
begin
ShellWin := CoShellWindows.Create;
ShellWinEvents.Connect(ShellWin);
for x := 0 to ShellWin.Count - 1 do
InterfaceConnect(ShellWin.Item(x) as IWebbrowser2, DwebbrowserEvents2, WBevents, Connection);
end;

procedure TForm1.ShellWinEventsWindowRegistered(Sender: TObject; lCookie: Integer);
begin
InterfaceConnect(ShellWin.Item(ShellWin.Count - 1) as IWebbrowser2, DwebbrowserEvents2, WBevents, Connection);
end;

procedure TForm1.WBEventsBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
listbox1.items.add(url);
end;

以上方法亲测通过,前提只适合IE内核浏览器,如果你用了搜狗、360的高速内核,是不行的
znkee 2011-10-19
  • 打赏
  • 举报
回复

http://it.china-b.com/cxsj/delphi/20090820/146211_1.html
dde参考地址。

天火 2011-10-19
  • 打赏
  • 举报
回复
有人知道没?
天火 2011-10-19
  • 打赏
  • 举报
回复
能详细些嘛?帮帮忙啊大侠们。
bdmh 2011-10-19
  • 打赏
  • 举报
回复
DDE

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧