如何干净地销毁 WebBrowser 控件

2024-03-15

我在 VisualC++10 中使用 ATL 来托管浏览器控件。 我的代码与此示例类似:http://msdn.microsoft.com/en-us/library/9d0714y1(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/9d0714y1(v=vs.80).aspx

不同之处在于我有主窗口,然后子窗口托管浏览器控件。 2 分钟后,我必须完全关闭浏览器,杀死浏览器 activeX,但这个子窗口应该处于活动状态并执行其他操作。但不知何故,这个浏览器控件仍然留在那里,我可以看到滚动条或其他东西。

我还尝试通过创建子窗口到现有的子窗口,然后在关闭浏览器时销毁子窗口的这个子窗口 - 但它仍然不起作用!

这就是我的关闭方式:

CLOSE()
{
    m_spIWebBrowser2->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
    m_spIWebBrowser2->Stop();
    m_spIWebBrowser2->put_Visible(VARIANT_FALSE);
    m_spIWebBrowser2->Quit();
    DestroyWindow(m_wndChild.m_hWnd);
}

Thanks!


关闭网络浏览器控件时,我遇到了许多“访问冲突”问题,这些是对我有用的步骤:

  1. 取消建议任何先前建议的事件(在我的例子中为 DWebBrowserEvents2)。
  2. 如果您已附加点击事件,请像这样取消附加它们:_variant_t v; v.vt = VT_DISPATCH; v.pdispVal = 0; IHTMLDocument2->put_onclick(v);
  3. IWebBrowser2->Stop()
  4. IWebBrowser2->ExecWB(OLECMDID_CLOSE, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)- 通过 window.external.CloseWindow() 关闭浏览器窗口时,我遇到了未处理的异常,并且 OLECMDID_CLOSE 修复了它。
  5. IWebBrowser2->put_Visible(VARIANT_FALSE)
  6. IWebBrowser2->Release()
  7. IOleInPlaceObject->InPlaceDeactivate()
  8. IOleInPlaceObject->Release()
  9. IOleObject->DoVerb(OLEIVERB_HIDE, NULL, IOleClientSite, 0, windowHandle_, NULL)
  10. IOleObject->Close(OLECLOSE_NOSAVE)
  11. OleSetContainedObject(IOleObject, FALSE)
  12. IOleObject->SetClientSite(NULL)
  13. CoDisconnectObject(IOleObject, 0)
  14. IOleObject->Release()

IWebBrowser2->Quit()不应为 WebBrowser 控件 (CLSID_WebBrowser) 调用,它仅适用于 Internet Explorer 对象 (CLSID_InternetExplorer)。

为什么一定要这么难?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何干净地销毁 WebBrowser 控件 的相关文章

随机推荐

  • 我可以预编译 python 脚本吗?

    我有一个 python 脚本 可以说http domain com hello py 它只打印 Hello World 是否可以预编译这个Python文件 我每秒收到大约 300 个请求 编译的开销非常高 在 Java 中 服务器可以轻松处
  • 如何有效地定义基于 XML 的文本协议的传输结束?

    我想开发一个基于XML并通过TCP IP套接字传输的文本协议 假设我有一个简单的请求 响应机制 可以通过持久化发送 客户端和服务器之间的 TCP IP 连接如下
  • Maven LifeCycleExecutor 配置不完整错误

    我正在使用最新版本的 Hudson CI 1 341 来构建我的 maven 2 项目 使用 2 2 0 构建 但我收到一些警告 如果通过命令提示符执行 我看不到这些警告 有人可以告诉我如何调试这个问题吗 Executing Maven B
  • Matlab 相当于 Python 枚举

    在Python中 我们有一个方便的函数enumerate for i item in enumerate foo list do something 有没有相当于Matlab的enumerate 目前 我能想到的是如下 Matlab代码 i
  • Groovy:如何在使用 XMLSlurper() 读取的 XML 元素列表的开头插入节点

    我可能错过了一些明显的东西 因为我是 Groovy 的菜鸟 但我已经搜索过 但还没有找到我想要的东西 我有一个测试类 我正在其中读取一些 XML 我想插入一个元素一开始一系列的元素 我已经弄清楚如何replace第一个元素 我已经弄清楚如何
  • 使用未跟踪的 .env 文件部署到 Heroku

    我在 Heroku 上部署 Django 应用程序时遇到问题 出现问题是因为我正在使用python decouple library https pypi python org pypi python decouple 我使用它是为了不暴露
  • 如何获取当前滑动窗口的最大时间戳

    我正在使用 X 大小和 Y 周期的滑动时间窗口 为了标记每个窗口的输出 我想获取PCollection当前窗口的时间戳 PCollection
  • MySQL存储过程中是否有列表数据类型,或者模拟它们的方法?

    我想在 MySQL 中创建一个以列表作为参数的存储过程 例如 假设我希望能够在一次调用中为一个项目设置多个标签 那么我想要做的就是定义一个过程 该过程接受该项目的 ID 和要设置的标签列表 但是 我似乎找不到任何方法来做到这一点 据我所知
  • 仅大小写不同的 C# 自动实现属性和局部变量的最佳实践?

    让我举一个例子 public class MyClass public string MyProperty get set public MyClass string myProperty MyProperty myProperty bad
  • 使用pySNMP编写SNMP代理(适用于OpenNMS)

    我正在尝试编写一个 python SNMP 代理 我可以将其嵌入到我的 python 应用程序中 以便可以通过 OpenNMS 远程监控该应用程序 OpenNMS 期望 Agent 实现HOST RESOURCES MIB查询两个字段hrS
  • 如何禁用 ASP.NET MVC url 路由

    只是想知道如何在 asp net MVC 中禁用 URL 重写 我不需要在我的应用程序中重写 URL 并且想将其关闭 原因 我知道 url 重写使用反射 并且希望通过避免它来节省一些 cpu 周期 谢谢 如果您担心性能 那就不用担心 尽管使
  • 在抽屉式菜单的页脚中添加按钮

    我想在抽屉菜单下添加这些按钮 这些是我的 xml 文件 布局 activity main
  • Firebase 中的独特属性

    我有一个包含类别的 IOS 应用程序 我在 Firebase 上的存储如下所示 root Categories key color name sum Expenses key amount category date description
  • Python pynput - 程序在启动时滞后

    所以我一直在尝试制作一个简单的程序 在单击鼠标右键时 使鼠标以 0 5 秒的间隔单击左键 3 次 然而 当我启动该程序并右键单击时 该程序会按照指示执行操作 但也会开始严重滞后约 25 秒 完成滞后后 我尝试关闭该程序 它冻结了 迫使我通过
  • 延长铁锈的使用寿命

    我有一些正在处理的代码 这是一个小辅助函数 应该返回一个Vec lt str gt 到调用函数 不过 我似乎无法正确地度过一生 这是代码片段 fn take symbol lt a gt ch a str current a mut Str
  • 我可以从 Docusign API 获取用于管理信封的 URL 吗?

    我可以使用 API 创建一个信封 该 API 返回如下所示的信封 ID 13f23354 7eee 41d3 897a c1353a1e465c 当我在浏览器中导航到 docusign 并打开信封时 网址为 https na2 docusi
  • 如何为现有自由式项目创建管道?

    我正在与詹金斯自由项目合作一段时间 现在我正在寻找一种解决方案来创建一个 管道 来执行多个这些 参数化 自由式项目 像这样的东西 execute freestyle project A with parameter p1 a execute
  • 获取受 git monorepo 最近提交影响的所有一级目录的列表

    我目前正在使用 monorepos 我正在尝试检索存储库中自给定提交以来受到影响的所有 1 级子文件夹的列表 到目前为止 我可以使用以下命令检索所有受影响的文件git diff name only COMMIT ID head Using
  • Eclipse 工作区插件文件夹中巨大的 *.CFS 文件到底是什么?

    我开始注意到我的 WD 驱动器已满 并对其进行了大小 巨大的文件搜索 它在这里出现了几个文件 F SCOTT SHARED DESKTOP My Documents JPA SPRING STRUTS metadata plugins or
  • 如何干净地销毁 WebBrowser 控件

    我在 VisualC 10 中使用 ATL 来托管浏览器控件 我的代码与此示例类似 http msdn microsoft com en us library 9d0714y1 v vs 80 aspx http msdn microsof