我用ShellWindows获得了已经打开的IE的IWebBrowser2接口,调用IWebBrowser2->GoHome是有用的,但是调用IWebBrowser2->navigate2没反应。刚刚开始学习COM,请高手帮我看看吧,下面是代码:#include "stdafx.h"
#include "afxdisp.h"
#include "mshtml.h"int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL); IShellWindows* m_spSHWinds;
::CoCreateInstance( CLSID_ShellWindows,NULL,CLSCTX_INPROC_SERVER,IID_IShellWindows,(LPVOID*)&m_spSHWinds);
long nCount; 
m_spSHWinds->get_Count(&nCount);

for (long i = 0; i < nCount; i++)
{
VARIANT va;
va.vt = VT_I4;
va.lVal = i;
IDispatch* spDisp;
m_spSHWinds->Item(va,&spDisp); IWebBrowser2* spBrowser;
spDisp->QueryInterface(IID_IWebBrowser2,(void**)&spBrowser);
if (spBrowser != NULL)
{
IHTMLDocument2* spDoc;
IDispatch* IDispDoc;
spBrowser->get_Document(&IDispDoc);
IDispDoc->QueryInterface(IID_IHTMLDocument2,(void**)&spDoc); if (spDoc != NULL)
{
VARIANT VaUrl;
VaUrl.vt = VT_BSTR;
VaUrl.bstrVal = ::SysAllocString(_T("http://www.csdn.net/")); VARIANT VaFlags;
VaFlags.vt = VT_I4;
VaFlags.intVal = navOpenInNewWindow; VARIANT VaTargetFrameName;
VaTargetFrameName.vt = VT_BSTR;
VaTargetFrameName.bstrVal = ::SysAllocString(_T("_BLANK")); spBrowser->Navigate2( &VaUrl, &VaFlags, &VaTargetFrameName, NULL, NULL);
puts("#"); ::SysFreeString(VaUrl.bstrVal);
::SysFreeString(VaTargetFrameName.bstrVal);
}
}
} ::CoUninitialize();
return 0;
}