主要函数如下:
AnsiString __fastcall TMainForm::GetFormValue(TCppWebBrowser *CppWebBrowser1, AnsiString ActionStr)
{
//赋值
AnsiString MyStr = ActionStr;
AnsiString SName,SId,SValue;
AnsiString ReturnStr; //返回值
ReturnStr = "";
SName = MyStr.SubString(1,MyStr.Pos(",")-1);
MyStr = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length()-MyStr.Pos(","));
SId = MyStr.SubString(1,MyStr.Pos(",")-1);
SValue = MyStr.SubString(MyStr.Pos(",")+1,MyStr.Length());
if(SValue==NULL)SValue="";
VARIANT id, index,id1,index1;
IDispatch *spDispatch;
IHTMLDocument2 *pDoc2;
IHTMLElement *pElement;
IHTMLElementCollection *pElementCol;
IHTMLFormElement *pFormElement;
IHTMLInputElement *pInputElement;//Input
IHTMLTextAreaElement* pTextAreaElement;// TextArea
IDispatch *WebDocument=static_cast<IDispatch*>(CppWebBrowser1->Document);
pDoc2=static_cast<IHTMLDocument2*>(WebDocument);
//首先获取IWebBrowser2接口
if (SUCCEEDED(pDoc2->get_forms(&pElementCol))) //得到form
{
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p))) //哪一个form
if(p!=0)
{
for(long i=0;i<=(p-1);i++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
{
long q=0;
if(SUCCEEDED(pFormElement->get_length(&q))) //得到form中的控件个数
for(long j=0;j<=(q-1);j++)
{
V_VT(&id) = VT_I4;
V_I4(&id) = j;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement)))
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputElement,(void**)&pInputElement)))
{
BSTR Value;
BSTR Type;
BSTR Id;
BSTR Name;
pInputElement->get_type(&Type); //获取类型
pInputElement->get_value(&Value); //获取值
pElement->get_id(&Id);//获取Id的方法不一样
pInputElement->get_name(&Name); //获取它的名字
AnsiString tempName,tempType;
tempType = AnsiString(Type).UpperCase();
if(tempType != "RADIO")
tempName = AnsiString(Name).UpperCase();
else
tempName = AnsiString(Id).UpperCase();
if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
{
tempName = AnsiString(Type).UpperCase();
if(tempName == "TEXT") //获取文本框的值
{
ReturnStr = AnsiString(Value);
}
else if(tempName == "PASSWORD") //获取密码框的值
{
ReturnStr = AnsiString(Value);
}
else if(tempName == "RADIO") //获取单选的值
{
}
else if(tempName == "CHECKBOX") //获取和设置多选框的值
{
}
else if(tempName == "BUTTON") //非提交按钮
{
}
else if(tempName == "SUBMIT") //提交按钮
{
}
break;
}//如果不符,则不做处理
pInputElement->Release();
}
else //不是input框
{
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLTextAreaElement,(void**)&pTextAreaElement)))
{//Textarea
BSTR Value;
BSTR Type;
BSTR Id;
BSTR Name;
//pTextAreaElement->get_type(&Type); //获取类型
pTextAreaElement->get_value(&Value); //获取值
pElement->get_id(&Id);//获取Id的方法不一样
pTextAreaElement->get_name(&Name); //获取它的名字
AnsiString tempName,tempType;
tempName = AnsiString(Id).UpperCase();
if(tempName!=NULL && ((tempName.Trim()).Length()>0) && tempName == SId.UpperCase())
{
ReturnStr = AnsiString(Value);//获取Textarea的值
break;
}
pTextAreaElement->Release();
}//Textarea
}
pElement->Release();
}//if pelement
spDispatch->Release();
}
}
pFormElement->Release();
}
spDispatch->Release();
}
}
}
}
if(pDoc2) pDoc2->Release();
return ReturnStr;
}
使用示例:
点击按钮2获取表单name为msg_type 的元素的值
点击按钮3获取表单name为msg_num的元素的值
void __fastcall TWebForm::Button2Click(TObject *Sender)
{
AnsiString Str = "a,msg_type,";
AnsiString RetStr = MainForm->GetFormValue(WebForm->CppWebBrowser1,Str);
ShowMessage(RetStr);
}
//---------------------------------------------------------------------------
void __fastcall TWebForm::Button3Click(TObject *Sender)
{
AnsiString Str = "a,msg_num,";
AnsiString RetStr = MainForm->GetFormValue(WebForm->CppWebBrowser1,Str);
ShowMessage(RetStr);
}