C++ 是否有任何IID_XXX可从Internet Explorer获取焦点选项卡?
我正在做一个项目,我想在web浏览器中当前访问的网页中插入一个脚本。我已经为同样的问题编写了以下代码C++ 是否有任何IID_XXX可从Internet Explorer获取焦点选项卡?,c++,internet-explorer,mfc,C++,Internet Explorer,Mfc,我正在做一个项目,我想在web浏览器中当前访问的网页中插入一个脚本。我已经为同样的问题编写了以下代码 IDispatch *spDisp; HRESULT hR; IHTMLWindow2 *pWnd = NULL; IWebBrowser2 *spBrowser = NULL; IHTMLDocument2 *spDoc = NULL; for (long i = 0; i < nCount; i++){ _varia
IDispatch *spDisp;
HRESULT hR;
IHTMLWindow2 *pWnd = NULL;
IWebBrowser2 *spBrowser = NULL;
IHTMLDocument2 *spDoc = NULL;
for (long i = 0; i < nCount; i++){
_variant_t va(i, VT_I4);
hR = m_spSHWinds->Item(va, &spDisp);
if(hR != S_OK)
continue;
hR =spDisp->QueryInterface(IID_IWebBrowser2, (void**)&spBrowser);
spDisp->Release();
if (hR == S_OK)
{
hR = spBrowser->get_LocationName(&str);
hR = spBrowser->get_LocationURL(&str);
hR = spBrowser->get_Document((IDispatch**)&spDisp);
hR = spDisp->QueryInterface(IID_IHTMLDocument2, (void**)&spDoc);
spDisp->Release();
if(hR == S_OK){
hR = spDoc->get_URL(&str);
}
}
}
IDispatch*spDisp;
HRESULT-hR;
IHTMLWindow2*pWnd=NULL;
IWebBrowser2*spBrowser=NULL;
IHTMLDocument2*spDoc=NULL;
用于(长i=0;iItem(va和spDisp);
如果(hR!=S_正常)
继续;
hR=spDisp->QueryInterface(IID_IWebBrowser2,(void**)和spBrowser);
spDisp->Release();
如果(hR==S_正常)
{
hR=spBrowser->get_LocationName(&str);
hR=spBrowser->get_LocationURL(&str);
hR=spBrowser->get_文档((IDispatch**)和spDisp);
hR=spDisp->查询接口(IID_IHTMLDocument2,(void**)和spDoc);
spDisp->Release();
如果(hR==S_正常){
hR=spDoc->get_URL(&str);
}
}
}
这里m_spSHWinds
是ishellwindowsptrm_spSHWinds的对象代码>并初始化为m_spSHWinds.CreateInstance(uu uuidof(ShellWindows))代码>
但问题是。它让我在IE浏览器中以一系列的标签来处理所有的网页。但我只需要当前从“全部”中选择的选项卡
谁能告诉我怎么做?
对不起,英语不好。我该怎么做:
安装一个全局挂钩
在钩子过程中,筛选发送到类“internetexplorer\u Server
”的窗口的消息,然后筛选该消息
当您检测到焦点事件时,使用向程序发送信号,使用lParam
携带HWND
。这样做只是为了获得焦点,而不是失去焦点
您将要发送邮件的HWND
,可能通过以下途径知道。这是主程序的一个窗口
当心托管钩子的IE进程的低级别完整性。在最新版本的IE和最新版本的Windows上,您的PostMessage
可能会失败,并出现错误“拒绝访问”。要克服这一点,您必须使用。警告:如果您以Windows Vista为目标,则必须使用。处理这个问题的最佳方法是通过user32.dll
动态查询API的可用性,从Ex
版本开始,返回到旧版本。如果两者都不存在,不用麻烦,您使用的是XP(或更低版本)
现在,您可以在主程序中存储最后一个聚焦IE渲染窗口的HWND
,这应该适用于任何版本的IE
您可以将WM_DESTROY
添加到钩子过滤器中,并通知主程序,因为您可能希望解决关闭最后一个焦点选项卡的情况
当用户单击按钮时,使用“WM\u HTML\u GETOBJECT
”注册窗口消息和ObjectFromLresult
API获取IHTMLDocument2
界面指针。请参阅。什么触发了代码的执行?抱歉,我无法理解您的问题…您问题中的代码是由用户操作触发的吗?或者它是在后台运行的,如果是,是什么激活了它?这是由我的应用程序中的用户操作激活的。在按钮点击事件。然后,在那个时刻,并没有焦点标签。你想知道的是“上一个焦点标签是什么,即使那是一个小时前”?