做过ie编程的请进,关于拦截页面事件
偶想实现一个浏览器界面,给页面元素的事件加一段C++代码来处理,由于不怎么清楚COM/IE,请大家提示一下,谢谢!
取得页面元素的代码如下
void CIeUIView::OnDocumentComplete(LPCTSTR lpszURL)
{
CHtmlView::OnDocumentComplete(lpszURL);
AnalyzeHtmlPage();
}
void CIeUIView::AnalyzeHtmlPage()
{
CComPtr<IDispatch>pDisp;
pDisp = GetHtmlDocument();//取得页面的文档
if(!pDisp) return;//取不到
//获取文档接口
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2>phd(pDisp);
if(phd)//获取文档接口成功
{
CComPtr<IHTMLElementCollection>phec;
if(SUCCEEDED(phd->get_all(&phec)))//获取所有元素成功
{
long lngCount = 0;
//确定元素总数
if(SUCCEEDED(phec->get_length(&lngCount)) && lngCount>=0)
{
IHTMLElement* phe;
IDispatch *pd;
VARIANT vaName;//元素的名称
VARIANT vaIdx;//元素的索引
vaName.vt = VT_INT;//整数类型
vaIdx.vt = VT_INT;//整数类型
//依次获取各个元素的IDispatch接口
for(long i=0;i<lngCount;i++)
{
pd = NULL;
vaIdx.intVal = i;
vaName.intVal = i;
if(SUCCEEDED(phec->item(vaName,vaIdx,&pd)))
{
if(pd)
{
if(SUCCEEDED(pd->QueryInterface(IID_IHTMLElement,(PVOID *)&phe)))
{
if(phe)
{
//=============================
//*****************************
//*******===问题在这里===******
//*****************************
//=============================
phe->Release();
}
}
pd->Release();
}
}
}
}
}
}
}
}
上面中间写着“问题在这”的地方有不懂的,请教各位:
1.怎么确定哪个元素是什么类型或名称的?比如,页面上有很多
<a href="..."></a>和button等等,我需要对不同元素
进行不同的处理。我用GetClassName()达不到目的,总是
得到一个空指针,不知道是不是用错了
2.比如我想调用phe->put_onlick()设置onclick()事件的处理函数,
需要一个IDispatch派生类的指针,并
实现它的Invoke()函数中的ID为DISPID_CLICK的处理,请问,我怎么获得/
生成这样一个派生类?我不想用ocx/dll,希望这个派生类对象只存在于
exe文件里面,而且不需要注册,怎么做?
偶一个帖最多给到200分,分数不够可以另开帖补上,哪位兄弟姐妹知道的,请不吝指教!有示例更好,不胜感激!
QQ: 7542023
E-mail: indep@263.net
yahoo和msn ID:都是illufe
九城ID: yleerF