求高手指点IHTMLDocument get_script 失败 IHTMLDocument2 get_parentWindow也失败

victorzou 2007-08-22 06:43:13
我想获得IHTMLWindow2 接口,但老是出现不支持接口,不知道哪里有问题
///////////////pIHTMLDocument2 is IHTMLDocument2 pointer
CComPtr<IDispatch> spScript;
CComPtr<IHTMLDocument> spDoc;
CComQIPtr<IHTMLWindow2> spWin;
hresult = pIHTMLDocument2->QueryInterface( IID_IHTMLDocument,(void **) &spDoc);
if (FAILED(hresult)) return hresult;
hresult = spDoc->get_Script(&spScript);
//spScript is 0, hresult is -2147467262 not supported interface,
if (FAILED(hresult)) return hresult;
spWin = spScript;
VARIANT pvarRet = {0};
hresult = spWin->execScript((_bstr_t)strSrc, L"JavaScript",
&pvarRet );

//下面的函数也是没执行,
pIHTMLDocument2->get_parentWindow( &spWin );
//spWin is 0.
我看了网上有个帖子说说初始化的问题,我也改了CoInlitize() 就是不能获得IHTMLWindow2

...全文
1312 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorzou 2007-09-19
  • 打赏
  • 举报
回复
结帖,成功试过了有界面条件下,IWebbrowser2作为其有资源id的子窗口,但象cwinthread这样的没有资源id的,不能做event map,就搞不懂了.可能需要advise.
shubing820904 2007-09-03
  • 打赏
  • 举报
回复
jiangsheng,eduyu提示的很好啊! 对我也有帮助啊!
蒋晟 2007-08-28
  • 打赏
  • 举报
回复
1. In new thread you need to initialize COM with CoInitialize[Ex] or OleInitialize.
2. If it's STA thread, then you need to establish message loop there.
3. You need to marshal COM pointers to there prior to using them.
For more details see:
"Processes, Threads, and Apartments"
http://msdn.microsoft.com/library/en-us/com/html/cb62412a-d079-40f9-89dc-cce0bf3889af.asp

"Inter-Object Communication"
http://msdn.microsoft.com/library/en-us/com/html/dd4adafb-a7e4-44ba-ae4a-80585875ecb6.asp
victorzou 2007-08-28
  • 打赏
  • 举报
回复
jiangsheng,eduyu 看了你们的提示,结合CHtmlview的源代码,似乎有点领悟,mfc类CHtmlView是从cformview继承来的,但htmlview.h里添加了 DECLARE_EVENTSINK_MAP()和IWebBrowser2* m_pBrowserApp;接着就直接申明了IWebBrowser2的一系列事件.使得CHtmlView具有接受成员IWebBrowser2事件的功能.不知理解是否有误.
eduyu提供的是atl的例子,大致理解,还得实践一下.谢谢
eduyu 2007-08-27
  • 打赏
  • 举报
回复
//类,同时也是接收器(sink)
class CTridentContainer
{
...
CAxWindow2 m_ax[2];
}

//成员函数
LRESULT CTridentContainer::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam,BOOL& lResult)
{
......

HWND hwndContainer =
m_ax[m_iCurrBrowser].Create(m_hWnd, rect,
L"about:One",
//L"{8856F961-340A-11D0-A96B-00C04FD705A2}",
//L"mshtml:<b>Wow!</b>",
WS_CHILD | WS_VISIBLE|WS_VSCROLL|WS_HSCROLL,0,BROWSER1ST);

......
AtlAdviseSinkMap(this, true);
......
}

//成员函数,同时也是接收器的成员函数
STDMETHODIMP CTridentContainer::DocumentComplete( IDispatch *pDisp,VARIANT *URL )
{
CComQIPtr<IWebBrowser2> spBrowser=pDisp;
ATLASSERT(spBrowser!=0);

CComPtr<IDispatch> pDocDisp;
spBrowser->get_Document(&pDocDisp);
CComQIPtr<IHTMLDocument2> spHTMLDoc2_=pDocDisp;
CComPtr<IHTMLWindow2> spHTMLwin2_;
spHTMLDoc2_->get_Script((IDispatch **)&spHTMLwin2_);
ATLASSERT(spHTMLwin2_);

}
victorzou 2007-08-26
  • 打赏
  • 举报
回复
因为我是CoCreateInstance产生的ie窗口,是线程里的变量,DocumentComplete事件怎么通知线程,ReadyState状态和busy状态不能说明是否DocumentComplete完成吗.

eduyu有没有代码参考一下.谢谢
蒋晟 2007-08-26
  • 打赏
  • 举报
回复
msdn2.microsoft.com/en-us/library/bb508508.aspx
eduyu 2007-08-25
  • 打赏
  • 举报
回复
不要sleep,
在DocumentComplete里面做得到IHTMLWindow2的工作。
victorzou 2007-08-24
  • 打赏
  • 举报
回复
up


victorzou 2007-08-23
  • 打赏
  • 举报
回复
上面我有对spBrowser进行判断是否忙碌,是否下载完毕
VARIANT_BOOL BBusy=FALSE;
//READYSTATE m_ReadyState;
spBrowser->get_Busy(&BBusy);
//spBrowser->get_ReadyState&m_ReadyState);//get_Busy
while (BBusy)
{
n++;
Sleep(1000);
spBrowser->get_Busy(&BBusy);//
}
victorzou 2007-08-23
  • 打赏
  • 举报
回复
HRESULT hr;
IWebBrowserApp* pWBApp = NULL; // Derived from IWebBrowser
hr = CoCreateInstance(CLSID_InternetExplorer,NULL,CLSCTX_SERVER,
IID_IWebBrowserApp,(LPVOID*)&pWBApp);
CComQIPtr< IWebBrowser2 > spBrowser;
........
hr = pWBApp->Navigate(bstrURL, &vFlags,&vTargetFrameName, &vPostData, &vHeaders);
......
CComPtr < IDispatch > spDispDoc=NULL;
hr = spBrowser->get_Document( &spDispDoc );
CComQIPtr< IHTMLDocument2 > spDocument2 = spDispDoc;// 程序运行到此,已经找到了 IHTMLDocument2 的接口指针
蒋晟 2007-08-23
  • 打赏
  • 举报
回复
pIHTMLDocument2的值怎么来的
victorzou 2007-08-23
  • 打赏
  • 举报
回复
这个例子是说明如何开启,关闭,梅举,查找shell window ,我要求的是获取IHTMLWindow2 ,楼上的意思是不是要通过遍历查找shellwindow来找IHTMLWindow2,如果是这样怎么将IHTMLWindow2与shell对应
  • 打赏
  • 举报
回复
http://www.codeproject.com/shell/AutomateShellWindow.asp

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧