IShellWindows*跟SHDocVw:IShellWindowsPtr用过的朋友进
IShellWindows*和SHDocVw::IShellWindowsPtr用过的朋友进
使用SHDocVw::IShellWindowsPtr::CreateInstance 没问题
使用 IShellWindows* m_spSHWinds;
::CoCreateInstance 空值;
请问是什么原因
另外在 SHDocVw::IShellWindowsPtr::CreateInstance后 可以得到WIN7 X64的IE浏览器的doc 而 x32 IE浏览器得不到.
------解决方案--------------------
------解决方案--------------------
使用SHDocVw::IShellWindowsPtr::CreateInstance 没问题
使用 IShellWindows* m_spSHWinds;
::CoCreateInstance 空值;
请问是什么原因
另外在 SHDocVw::IShellWindowsPtr::CreateInstance后 可以得到WIN7 X64的IE浏览器的doc 而 x32 IE浏览器得不到.
------解决方案--------------------
::CoInitialize(NULL);
IShellWindows* m_spSHWinds;
::CoCreateInstance(CLSID_ShellWindows,NULL,CLSCTX_INPROC_SERVER,IID_IShellWindows,(LPVOID*)&m_spSHWinds);
long nCount;
CString str;
m_spSHWinds-> get_Count(&nCount);
BSTR Url ;
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)
{
spDoc-> get_URL(&Url);
str = Url;
MessageBox(str);
}
}
}
return;
------解决方案--------------------
CoInitialize(NULL);
long nRelNum = 0;
SHDocVw::IShellWindowsPtr m_spSHWinds;
if (m_spSHWinds == NULL)
{
if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
{
MessageBox(L"Failed");
CoUninitialize();
return ;//nRelNum;
}
}
long nCount = m_spSHWinds->GetCount();
IDispatchPtr spDisp;
for (long i = 0; i < nCount; i++)
{
_variant_t va(i, VT_I4);
spDisp = m_spSHWinds->Item(va);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
BSTR name = SysAllocString(L"");
spBrowser->get_FullName(&name);
if (spBrowser != NULL)
{
IDispatchPtr spDisp;
if(spBrowser->get_Document(&spDisp) == S_OK && spDisp != 0 )
{
CComQIPtr<IHTMLDocument2> pDoc;
CComQIPtr<IHTMLElementCollection> pElemAll;
spDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);