起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 215|回复: 9

[请求]webbrowser中关闭网页问题

[复制链接]
发表于 2010-5-17 16:56:30 | 显示全部楼层 |阅读模式
使用webbrowser打开网页,点击网页中的关闭结果提示:
could not obtain ole control window handle。然后一直无法关闭。
请帮忙解决。
谢谢
回复

使用道具 举报

 楼主| 发表于 2010-5-17 17:13:51 | 显示全部楼层
求助,顶。
回复 支持 反对

使用道具 举报

发表于 2010-5-17 17:16:58 | 显示全部楼层
WebBrowser.ExecWB(1,1) //打开
WebBrowser.ExecWB(2,1) //关闭所有
WebBrowser.ExecWB(4,1) //另存为
WebBrowser.ExecWB(6,1) //打印
WebBrowser.ExecWB(6,6) //直接打印
WebBrowser.ExecWB(7,1) //打印预览
WebBrowser.ExecWB(8,1) //页面设置
WebBrowser.ExecWB(10,1) //属性
WebBrowser.ExecWB(17,1) //全选
WebBrowser.ExecWB(22,1) //刷新
WebBrowser.ExecWB(45,1) //关闭
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-17 17:23:29 | 显示全部楼层
我使用WebBrowser.navigate()打开的页面中,
有个关闭按键,执行的js:
window.close();
如果点击关闭按键,就会报could not obtain ole control window handle。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-17 17:34:49 | 显示全部楼层
可以帮忙解决吗?
急!
回复 支持 反对

使用道具 举报

发表于 2010-5-17 17:38:43 | 显示全部楼层
楼主,试试delphi中此类用法是否正确呢?
我看网上有类似的错误信息,你参考看下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-17 17:44:34 | 显示全部楼层
如何在x3中编写处理代码?
~~~~~~~~~~~~~~~~~~
我使用的webbrowser是在pagecontrol中动态创建的,如果点击网页中的关闭本页按钮,就会提示"could not obtain OLE control window handle",不知道怎么解决?
--------------------------------------------------------------------------------

网友1回答:
--------------------------------------------------------------------------------
在你的窗体上加一个ApplicationEvents,在Additional组中,
然后在它的OnMessage事件中加入如下代码:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_CLOSE) then
begin
if msg.hwnd=webbrowser1.Handle then//如果是关闭Webbrowser
begin
PeekMessage(Msg, Msg.Hwnd, 0, 0, PM_REMOVE);
Handled := True; //该消息已处理,不再需要后续处理
end;
end
end;

网友2回答:


--------------------------------------------------------------------------------
如果是动态创建的WebBrowser:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var classname:array[0..254]of char;
begin
if (Msg.message = WM_CLOSE) then
begin
getclassname(msg.hwnd,@classname,sizeof(classname));//取类名
if classname='Shell Embedding' then
begin
PeekMessage(Msg, Msg.Hwnd, 0, 0, PM_REMOVE);
Handled := True; //该消息已处理,不再需要后续处理
end;
end
end;
回复 支持 反对

使用道具 举报

发表于 2010-5-17 17:50:49 | 显示全部楼层
方法一可以试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-18 08:00:49 | 显示全部楼层
那是delphi的写法。
如何在x3中编写处理代码?
x3中似乎没有对应的事件。
回复 支持 反对

使用道具 举报

发表于 2010-5-18 08:50:32 | 显示全部楼层
代码是一样的,工具箱中有ApplicationEvents这个控件,
ie下不知道是否起作用,你可以试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 22:36 , Processed in 0.044691 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表