> spInputButton(spDisp);
CComQIPtr < IHTMLInputHiddenElement > spInputHidden(spDisp);
if ( spInputText )
{
//如果是文本输入表单域
}
else if ( spInputButton )
{
//如果是按纽输入表单域
}
else if ( spInputHiddent )
{
//如果是隐藏输入表单域
}
else if .. //其它输入类型
上面的方法,由于使用具体类型的接口指针,因此程序的效率比较高。但是通过 QueryInterface 接口
查询,然后再进行条件判断显然是比较烦琐的,所以这个方法适合于特定的已知网页设计内容的程序。在示例程序中,我则是直接使用 IDispatch 接口进行操作的,这个方式执行起来稍微慢一些,但
程序比较简单。主要代码和说明如下:#include < atlbase.h >
CComModule _Module; // 由于需要使用 CComDispatchDriver 的 IDispatch 包装类ATL智能指针,所以这个是必须的
#include < atlcom.h >
long nElemCount=0; //表单域的总数目
spFormElement->get_length( &nElemCount );
for(long j=0; j< nElemCount; j++)
{
CComDispatchDriver spInputElement; // IDispatch 的智能指针
spFormElement->item( CComVariant( j ), CComVariant(), &spInputElement );
CComVariant vName,vVal,vType; // 域名称,域值,域类型
spInputElement.GetPropertyByName( L"name", &vName );
spInputElement.GetPropertyByName( L"value",&vVal );
spInputElement.GetPropertyByName( L"type", &vType );
// 使用 IDispatch 的智能指针的好处就是:象上面这样读取、设置属性很简单
// 另外调用 Invoke 函数也异常方便,Invoke0(),Invoke1(),Invoke2().
}
四、结束语
示例程序在 VC6 下编译执行通过。运行方法:随便启动几个 IE 浏览网页,最好是有表单输入的网页。然后执行示例的 EXE 程序即可。