环境:VC6,MFC,使用WebBrowser控件。论坛是用Discuz!2.5做的
做法:如下代码
    IHTMLElementCollection *objAllElement=NULL;
    CComPtr<IDispatch>pDisp;
    //自动填写了用户名“测试”
    objAllElement->item(COleVariant("username"),COleVariant((long)0),&pDisp);
    CComQIPtr<IHTMLInputTextElement, &IID_IHTMLInputTextElement>pElement;
    pElement=pDisp;
    pElement->put_value(CString("测试").AllocSysString());//*/
//自动填写了用户密码
objAllElement->item(COleVariant("password"),COleVariant((long)0),&pDisp);
    pElement=pDisp;
    pElement->put_value(CString("123456789").AllocSysString());//*/
//自动选择了安全提问里面的一个选项
objAllElement->item(COleVariant("questionid"),COleVariant((long)0),&pDisp);
    CComQIPtr<IHTMLSelectElement, &IID_IHTMLSelectElement>psElement;
    psElement=pDisp;
    psElement->put_selectedIndex(2);//*/
//自动填写了安全提问的答案
objAllElement->item(COleVariant("answer"),COleVariant((long)0),&pDisp);
    pElement=pDisp;
    pElement->put_value(CString("哈哈").AllocSysString());//*/
//*/
………………之后用IHTMLFormElement得到了登陆的表单pForm。
……现在提交pForm->submit();现象:这种先填写表单之后提交表单的办法,在PHPWind下是有效的。
   但是现在在Discuz!2.5下却是没法提交的。
   (不提交的话,可以看得清清楚楚已经填上相应的表单信息了,所以问题估计出在提交上)
   现象就是一提交后又自动回到了登陆页面,而不是进入了论坛。
      好像这样做对登陆mail.163.com的邮箱也有点问题。
请问:怎么解决这个问题??谢谢

解决方案 »

  1.   

    如果不自动提交,而是用手工按一下enter键的话,是可以进入论坛的。这也就证明自动填写的信息没有任何错误。
      

  2.   

    If one and only one text box is on a form, pressing ENTER fires the onsubmit event. If the form has a submit button, the button appears with a dark border, indicating that pressing ENTER submits the form.
    -------------------------------------------
    以上是MSDN对submit的一点解释。
    Discuz!2.5的登陆按钮是appears with a dark border的,所以通过按一下enter就能登陆的,只要事先填写了表单信息
    PHPWind3.0.1也是一样有appears with a dark border,但是同样的情况下,是能自动提交的。怪事!!!!!!!!!!!
      

  3.   

    那你用以下这个提交方式:
      objAllElement->item(COleVariant("loginsubmit"),COleVariant((long)0),&pDisp);
        CComQIPtr<IHTMLElement, &IID_IHTMLElement>pbElement;
    if (pDisp==NULL)
    {
    //没有相应的按钮,也就对应的click()
    }
    else
    {
               pbElement=pDisp;
               pbElement->click();
    }
    已经测试过,可行。