设为首页 加入收藏

TOP

【组件】CppWebBrowser的使用三 获取表单内容
2012-11-01 11:24:26 来源: 作者: 【 】 浏览:368
Tags:组件 CppWebBrowser 使用   获取 表单 内容

CppWebBrowser的使用三 获取表单内容


主要函数如下:


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);
}

 


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【组件】微软Agent 的所有动.. 下一篇【组件】CppWebBrowser的使用二&n..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: