Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有任何IID_XXX可从Internet Explorer获取焦点选项卡?_C++_Internet Explorer_Mfc - Fatal编程技术网

C++ 是否有任何IID_XXX可从Internet Explorer获取焦点选项卡?

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

我正在做一个项目,我想在web浏览器中当前访问的网页中插入一个脚本。我已经为同样的问题编写了以下代码

        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
界面指针。请参阅。

什么触发了代码的执行?抱歉,我无法理解您的问题…您问题中的代码是由用户操作触发的吗?或者它是在后台运行的,如果是,是什么激活了它?这是由我的应用程序中的用户操作激活的。在按钮点击事件。然后,在那个时刻,并没有焦点标签。你想知道的是“上一个焦点标签是什么,即使那是一个小时前”?