IActiveDesktop(活动桌面)接口是否可以返回桌面上IWebBrowser2的指针?以便用程序来控制,比如用这个指针 pWeb->Navigate2("http://www.sohu.com")。或者用其它的方法实现也可以,只要可以从外面控制活动桌面。注意:要点是返回活动桌面的IE指针,可以直接控制活动桌面内容为准,不是通过IActiveDesktop的SetWallPaper之类的调用。给分100,人民币50(鼓动一下),银行转帐,言而有信!第一个真正实现的回答为准。EMail:[email protected]
解决方案 »
- 多表更新
- 高手请进,一个关于事件调用的问题!(在线等待,问题解决马上结贴!)
- 跪求各位高手帮帮忙,刚接触三层,最基本的都不会做!
- 几个函数就是搞不懂,请大侠帮忙
- 请问在Delphi中调用Mapx控件时的问题
- 救命啊我的硬盘~!!!
- 急!如何将服务器应用程序的remote data module的adoconnection的连接服务器名用代码修改。
- (简单问题紧急求救)当DBGRID组件Columns.State的属性为csDefault的时候如何指定DBGRID显示的Column
- 哪里有delphi技术手册(TM)下载的,谢谢
- 如此DLL!
- 谁有F1BOOK的例子?
- 如何用delphi动态建立和修改SQL SERVER数据库表
//前提条件:安装Microsoft shell controls and automation 类型库
//在Delphi中选Project Import Type Library命令,选择Microsoft shell controls and automation 类型库,
//点install后,在ACTIVEX控件板上多了几个组件,把TShell拖到桌面//说明:本人安装Microsoft shell controls and automation 类型库过程中碰到几个小问题,本人用的是
//DELPHI6+WIN2000,就是安装后出现4-6处编译错误:“只读属性不能被赋值”,比如下面就是一处错误:
//procedure TShellLinkObjectProperties.Set_Hotkey(piHK: SYSINT);
//begin
// DefaultInterface.Hotkey := piHK;就是这条语句出错
//end;
//解决办法:用鼠标右击出错处的HOTKEY,选弹出菜单的FIND DECLARATION,你会看到这条语句:
// property Hotkey: SYSINT read Get_Hotkey;原来是因为HOTKEY属性只定义了读方法,没有定义
//写方法,所以编译出错,知道出错原因,改就容易了,把它改成:
// property Hotkey: SYSINT read Get_Hotkey write Set_Hotkey,其中Set_Hotkey出错位置的过程名,
//其它几处错误就按上面的办法修改,成功后,ACTIVEX控件板就多了好几个组件,把TShell拖到桌面
//下面源代码
unit UtIEControl;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleServer, Shell32_TLB, StdCtrls;type
TForm1 = class(TForm)
BtnGetCount: TButton;
Shell1: TShell;
BtnGoHome: TButton;
BtnNavigator: TButton;
BtnClose: TButton;
edtURL: TEdit;
lblURL: TLabel;
procedure BtnGetCountClick(Sender: TObject);
procedure BtnGoHomeClick(Sender: TObject);
procedure BtnNavigatorClick(Sender: TObject);
procedure BtnCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses shdocvw;/////////////
{$R *.dfm}procedure TForm1.BtnGetCountClick(Sender: TObject);
var
shWin:IShellWindows;
begin
shWin:=Shell1.windows as IShellWindows;
showMessage(IntToStr(shWin.get_count));//当前桌面上打开的IE窗口数目
end;procedure TForm1.BtnGoHomeClick(Sender: TObject);
var
shWin:IShellWindows;
wb:IWebBrowser2;
i,j:integer;
begin
shWin:=Shell1.windows as IShellWindows;
i:=shWin.get_count;
if i>0 then
for j:=0 to i-1 do
begin
wb:=shWin.item(j) as IWebBrowser2;
wb.GoHome ;//将当前桌面上打开的所有IE窗口切换到主页
end;
end;procedure TForm1.BtnNavigatorClick(Sender: TObject);
var
shWin:IShellWindows;
wb:IWebBrowser2;
i,j:integer;
flag,url:olevariant;
begin
shWin:=Shell1.windows as IShellWindows;
i:=shWin.get_count;
flag:=0;
url:=edtURL.Text ;
if i>0 then
for j:=0 to i-1 do
begin
wb:=shWin.item(j) as IWebBrowser2;
wb.Navigate2(url,flag,flag,flag,flag);
//将当前桌面上打开的所有IE窗口切换到edtURL指定的页面
end;
end;procedure TForm1.BtnCloseClick(Sender: TObject);
var
shWin:IShellWindows;
wb:IWebBrowser2;
i,j:integer;
begin
shWin:=Shell1.windows as IShellWindows;
i:=shWin.get_count;
if i>0 then
for j:=0 to i-1 do
begin
wb:=shWin.item(j) as IWebBrowser2;
wb.quit;//将当前桌面上打开的所有IE窗口关闭
end;
end;end.
//事实上,有了上述ACTIVEX控件,你可以对IE窗口做任意你想要的控制,具体方法自已研究吧!
//说明,资源管理器窗口也是IE窗口,以上代码同时对资源管理器窗口起作用,如果要区分它们也是很容易
//的,不是吗?^_^