关于IHTMLDocument2::get_onmousedown,VARIANT

binbin 2003-11-14 08:21:04
我想在CB程序中获取和修改一个网页的<body onmousedown=...>属性,已经得到了它的IHTMLDocument2接口,但查msdn,get_onmousedown接收一个VARIANT指针,调用后该参数vt成员为9,应该是一个IDispatch*,我想获取其中的script脚本应该如何做?
我试过
IHTMLScriptElement* pElement;
if(S_OK==(tmp.pdispVal)->QueryInterface(IID_IHTMLScriptElement,(void **)&pElement))
{
//...
}
但得不到IHTMLScriptElement接口,怎么办?

另外,除了onmousedown,onmouseup这些IHTMLDocument2已有的属性外,其他如oncontextmenu怎么控制?
...全文
218 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子哟 2003-11-19
  • 打赏
  • 举报
回复
http://www.codeproject.com/com/
binbin 2003-11-19
  • 打赏
  • 举报
回复
这下好了,性欲分直线下降:(
to 老妖:
偶再试试,谢谢!
ccrun.com 2003-11-19
  • 打赏
  • 举报
回复
to binbin:

是不是你的IDispatch*取回的有问题?
在我这里很正常啊。可以取回pScriptElement。
Wingsun 2003-11-19
  • 打赏
  • 举报
回复
不要开那么多的贴,一个就够了,多余的我删掉了。
binbin 2003-11-18
  • 打赏
  • 举报
回复
只能自己顶一下了。
binbin 2003-11-18
  • 打赏
  • 举报
回复
matq2008(叶子) :
MSDN上关于IE接口的内容实在是太简单了,比如IHTMLDocument2接口中查msdn,get_onmousedown返回VARIANT,这个返回值该如何用?如何再用put_onmousedown设置新的内容???
binbin 2003-11-18
  • 打赏
  • 举报
回复
ccrun(老妖)(www.ccrun.com):
我就是这么做的,IDispatch*已经得到,但pIDispatch->QueryInterface(IID_IHTMLScriptElement,(void **)&pScriptElement);
这一句失败,pScriptElement为NULL,为什么???
ccrun.com 2003-11-17
  • 打赏
  • 举报
回复
用这个函数从IHTMLElementCollection中取得IDispatch接口

IDispatch *getElementInCollection(IHTMLElementCollection *pEltCollection,int ndx)
{
VARIANT variant,emptyVariant;
IDispatch *pIDispatch;

VariantInit(&variant);
VariantInit(&emptyVariant);

variant.vt = VT_I2;
variant.iVal = ndx;

pEltCollection->item(variant,emptyVariant,&pIDispatch);

if (pIDispatch == NULL)
{
ShowMessage("Unable to find element " + String(ndx) + "in collection");
}

return pIDispatch;
}



例子:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//取回IHTMLDocument2指针接口,这里换成你自己的接口代码就行了。
IHTMLDocument2 *spDoc = MyGetHTMLDocInterface((void *)0x00330432);
IHTMLScriptElement *pScriptElement;
IHTMLElementCollection *pElementColl;
IDispatch *pIDispatch;

wchar_t *ElementSrcText;

spDoc->get_scripts(&pElementColl);

long lItemCount;
pElementColl->get_length(&lItemCount);
for (int i = 0; i < lItemCount; i++)
{
pIDispatch = getElementInCollection(pElementColl,i);
pIDispatch->QueryInterface(IID_IHTMLScriptElement,(void **)&pScriptElement);
pIDispatch->Release();
if (pScriptElement != NULL)
{
pScriptElement->get_src(&ElementSrcText);
ShowMessage(ElementSrcText);
}
}
}
叶子哟 2003-11-17
  • 打赏
  • 举报
回复
这些东西你得去查msdn是最好的了,你看各种接口哪一种是你需要的,都有什么样的接口,我想应该有解决的方法
至于是不是vc,无所谓,只是语法有差异,核心是一样,因为这个本身就是ms的activex
zihan 2003-11-16
  • 打赏
  • 举报
回复
呵呵,如果不行,给你一个野蛮的,不过需要你自己的浏览器才可以.
就是把下载下来的html源代码保存,然后修改源代码,然后调用本地的html源代码.呵呵!
binbin 2003-11-16
  • 打赏
  • 举报
回复
又开了两贴,一同600分.
binbin 2003-11-16
  • 打赏
  • 举报
回复
简而言之,如何从IHTMLElementCollection得到IHTMLElement?
binbin 2003-11-16
  • 打赏
  • 举报
回复
搞不定啊.
我的目的与那个不完全一样,而且对VC和COM不熟悉.希望借此学习一下.
如何从IDispatch*取得想要的接口?
已经取到了IHTMLDocument2接口,我想遍历和修改文档中所有的script脚本,应该如何做?
IHTMLDocument2::get_scripts ->得到 IHTMLElementCollection,
然后循环遍历之,从IHTMLElementCollection::item ->得到一个IDispatch*,我不知道下面该怎么办了,想从这个IDispatch*得到IHTMLScriptElement接口,可是失败,给点建议吧!
chifengwatch 2003-11-16
  • 打赏
  • 举报
回复
up
binbin 2003-11-16
  • 打赏
  • 举报
回复
看看去,解决不了再回来问.
叶子哟 2003-11-14
  • 打赏
  • 举报
回复
这是经典的有关IE编程的地儿:http://www.codeguru.com/ieprogram/
叶子哟 2003-11-14
  • 打赏
  • 举报
回复
http://www.codeguru.com/ieprogram/JSCalls.html

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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