如何从IE打开新选项卡

时间:2015-03-26 02:06:17

标签: c++ internet-explorer

我想从IE打开html文件。

所以,我使用像这样的ShellExecute API。

ShellExecute(NULL, L"open", html file path, NULL, NULL, SW_SHOW);

但是,我的默认浏览器是Chrome。

Html文件向Chrome新标签页打开。

所以,我试试这个。

ShellExecute(NULL, L"open",  IE file path, html file path, NULL, SW_SHOW);

我将参数设置为html文件路径。

但是,该方法是创建新窗口。

我想从IE打开html文件。(新标签!)

感谢。

1 个答案:

答案 0 :(得分:1)

您必须使用ShellWindows实例在Internet Explorer中打开新选项卡,而不是ShellExecute。检查从Warwick Systems获取的代码来完成此操作:

void OutputToWebBrowser(const CString & path)
{
    IShellWindows *psw;
    HRESULT hr = CoCreateInstance(CLSID_ShellWindows,NULL,CLSCTX_ALL,IID_IShellWindows,(void**)&psw);
    if (!SUCCEEDED(hr)) 
        return;
    IWebBrowser2* pBrowser2 = 0;
    bool found = false;
    long nCount = 0;
    hr = psw->get_Count(&nCount);
    if (SUCCEEDED(hr))
    {
      for (long i = nCount - 1; (i >= 0) && (!found); i--) {
        // get interface to item no i
         _variant_t va(i, VT_I4);
      IDispatch * spDisp;
      hr = psw->Item(va,&spDisp);
      hr = spDisp->QueryInterface(IID_IWebBrowserApp,(void **)&pBrowser2);
      if (SUCCEEDED(hr))
         {
              BSTR name;
              pBrowser2->get_FullName(&name);
             CString n(name);
             if (n.Find("IEXPLORE") == -1)
                 pBrowser2->Release();
             else
                 found = true;
           }
      }
     psw->Release();
   }

   if (!found)
         hr = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,IID_IWebBrowser2,(void**)&pBrowser2);

    if (SUCCEEDED(hr))
   {
      VARIANT vEmpty;
      VariantInit(&vEmpty);
      _variant_t URL, Flag, TargetFrameName, PostData, Headers;
     Flag.ChangeType(VT_I4, &Flag);
     if (found)
         Flag.intVal = 0x800;
     URL.SetString(path);

     hr = pBrowser2->Navigate2(&URL, &Flag, &vEmpty, &vEmpty, &vEmpty);
     if (SUCCEEDED(hr))
     {
          pBrowser2->put_Visible(TRUE);
      }
     else
     {
         pBrowser2->Quit();
      }
     pBrowser2->Release();
   }
}