multithreading - 在异步可插拔协议(protocol)线程中 - 如何将其关联/解析到实现::SetSite() 的特定 COM 对象?

标签 multithreading com bho pluggableprotocol

在 IE11 中,当访问 www.yahoo.com 等网站时,多个线程将触发应用程序 - 并且这些线程中只有很小的子集可以与浏览器窗口关联(通过查询服务提供商等) ),在创建选项卡时在::SetSite() 调用中传递。

这不适用于现代网站上的大多数线程(例如 www.evernote.com)

如何找出线程代表哪个 IE 选项卡 - 或者这是不可能的?

我很想知道有某种方法可以将这些线程与传递给::SetSite() (或类似的东西)的 pUnkSite 相匹配 - 但这似乎与我迄今为止经历过的 IE 模型不同。

谢谢。

最佳答案

尝试切换/继续技巧。您的应用程序将像这样调用 IInternetProtocolSink::Switch ,例如在开始中:

PROTOCOLDATA data = {0};
data.grfFlags = PD_FORCE_SWITCH;  // important
pProtocolSink->Switch(&data);

最终,客户端将转身并在主 UI 线程上对您调用 IInternetProtocol::Continue。一旦进入主线程,IServiceProvider::QueryService(IID_IWindowForBindingUI) 之类的东西应该可以工作,并帮助您连接回请求的浏览器和/或文档。

关于multithreading - 在异步可插拔协议(protocol)线程中 - 如何将其关联/解析到实现::SetSite() 的特定 COM 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785521/

相关文章:

java - 在主线程中等待 HTTP 请求

internet-explorer - IE 浏览器助手对象应该在哪里存储其数据文件?

java - 下载多个文件时线程 IllegalThreadStateException

wpf - 捕获线程、任务、计时器、ThreadPool 线程和后台工作线程上引发的 UnhandledExceptions

android - AsyncTask不会在Android 2.3 Andengine中引发异常

com - 如何在插件体系结构中进行免注册的COM

delphi - 如何识别 MS Excel 对象类型?

delphi - COM API 调用后,仅在 Windows 7 上切换用户或锁定工作站时出现 EOSError 异常(访问被拒绝)

internet-explorer - 如何获取Internet Explorer 提供的原始IDocHostUIHandler?

c# - SpicIE 在开发 IE 插件时有哪些限制?