郁闷呀!这两段程序有什么不一样的?送分
最近太郁闷了,在csdn中c++builder版中问了半天问题都没人理,现在只好把代码拿出来再次恳请各位帮忙指导一下。情况是这样的,我在form上放了一个tcppwebbrowser控件,然后想取到所载入页面的内容,比如取得一个文本框中的内容。下面两个函数,第一个可以取到改文本框的属性和名字,可是取值时却返回为空,第二个则可以取到内容。小弟看了半天也没看出这两个有什么本质不同,不知前个函数到底哪出问题了,恳请各位试好后将代码告诉我。具体如下:
void __fastcall TForm1::Button4Click(TObject *Sender)
{
IDispatch *WebDocument = static_cast<IDispatch *>(CppWebBrowser1->Document);
IHTMLDocument2 *HTMLDocument = static_cast<IHTMLDocument2 *>(WebDocument);
IHTMLElementCollection *pAll;
HTMLDocument->get_all(&pAll);
long AllLen;
pAll->get_length(&AllLen);
VARIANT vIndex,vName;
IHTMLElement *pElement;
IHTMLInputTextElement *pInput;
IDispatch *IDisp;
for(long i= 0;i<AllLen;++i)
{
vName.vt=VT_I4;
vIndex.vt=VT_I4;
vName.lVal=i;
vIndex.llVal=i;
pAll->item(vName,vIndex,&IDisp);
IDisp->QueryInterface(IID_IHTMLElement,(void **)&pElement);
BSTR ItemTag;
pElement->get_tagName(&ItemTag);
AnsiString TagName = ItemTag;
if(TagName.UpperCase() == (AnsiString)"INPUT")
{
pElement->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInput);
BSTR pwd;
AnsiString tmp;
pInput->get_type(&pwd);//这里都有值返回
tmp = pwd;
pInput->get_name(&pwd);//这里也有返回
tmp = pwd;
pInput->get_value(&pwd);//这里为空了
tmp = pwd;
break;
}
}
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
IHTMLDocument2 *pDoc = NULL;
IHTMLElementCollection* Col;
IDispatch *ppvdisp;
IHTMLInputTextElement *pPwdElement;
IHTMLFormElement *pFormElement;
HRESULT hr;
long len;
(void *)pDoc = CppWebBrowser1->Document;
hr = pDoc->get_forms(&Col);
if(hr == S_OK)
{
VARIANT index;
index.vt = 0x0003;
index.wReserved1 = 0xcccc;
index.wReserved2 = 0xcccc;
index.wReserved3 = 0xcccc;
index.lVal = 0x00000000;
Col->item(index,index,&ppvdisp);
hr = ppvdisp->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement);
if(hr == S_OK)
{
IDispatch* dispatch;
pFormElement->item(index,index,&dispatch);
hr = dispatch->QueryInterface(
IID_IHTMLInputTextElement,
(void**)&pPwdElement);
if(hr == S_OK)
{
BSTR pwd;
hr=pPwdElement->get_value(&pwd);
if(SUCCEEDED(hr))
{
AnsiString tmp = pwd;
//Edit2->Text = pwd;
}
}
}
}
pDoc->Release();
}
所在入页面内容如下:
<HTML>
<HEAD>
<TITLE>IE TEST</TITLE>
</HEAD>
<BODY>
<FORM NAME="contest" >
<INPUT TYPE="TEXT" NAME="first" VALUE="skdjfk">
<INPUT TYPE="TEXT" NAME="initial">
<INPUT TYPE="TEXT" NAME="email">
</FORM>
</BODY>
</HTML>