回 帖 发 新 帖 刷新版面

主题:获取网页(论坛发帖子的)文本框控件内容

想要获取网页文本框控件内容(非密码文本框,比如论坛发帖子的文本框),试了一些方法,比如,用Spy++和GetWindowText,可以获取Eidt控件的内容,但这种发帖子的控件类型好像很特别,所以获取不到.
  我下载了一个软件源码,它可以获取网页文本框中的内容,但就是不能获取论坛发帖子的文本框的内容,是不是因为这种文本框的类型与其他的文本框不同呢??

部分关键源码:

void CGetHtmlPassDlg::OnButtonRefresh() 
{
    
    VARIANT id, index;
    CComPtr<IDispatch> spDispatch;
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
    CComPtr<IHTMLElement> pElement;
    CComPtr<IHTMLElementCollection> pElementCol;
    CComPtr<IHTMLFormElement> pFormElement;
    CComPtr<IHTMLInputTextElement> pInputElement;
    // TODO: Add your control notification handler code here
    int n = m_ctrlIE.GetItemCount();//GetCount();
    
    for (int i = 0; i < n; i ++){
        IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_ctrlIE.GetItemData(i);
        if (pBrowser){
            pBrowser->Release();
        }
    }
    
    m_ctrlIE.DeleteAllItems();
    
    if (m_spSHWinds){
        int n = m_spSHWinds->GetCount();
        for (int i = 0; i < n; i++){
            _variant_t v = (long)i;
            IDispatchPtr spDisp = m_spSHWinds->Item(v);
            
            
            SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);   //生成一个IE窗口的智能指针
            if (spBrowser){
                
                if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
                    pDoc2 = spDispatch;
                if(pDoc2!=NULL)
                {
                    {
                        if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))
                        {
                            //    AfxMessageBox("IHTMLElementCollection");
                            long p=0;
                            if(SUCCEEDED(pElementCol->get_length(&p)))
                            if(p!=0)
                            {   
                                // AfxMessageBox("1");
                                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)))
                                        // AfxMessageBox("2");
                                        if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
                                        {
                                            // AfxMessageBox("IHTMLFormElement");
                                            long q=0;
                                            if(SUCCEEDED(pFormElement->get_length(&q)))
                                            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_IHTMLInputTextElement,(void**)&pInputElement)))
                                                    {
                                                        //AfxMessageBox("IHTMLInputTextElement");
                                                        CComBSTR value;
                                                        CComBSTR type;
                                                        
                                                        pInputElement->get_type(&type);
                                                        
                                                        CString strtype(type);
                                            
                                                        strtype.MakeUpper();
                                                        if(strtype.Find("TEXT")!=-1)
                                                        {
                                                            pInputElement->get_value(&value);
                                                            CString str(value);
                                                            if(!str.IsEmpty())
                                                            {
                                                            SavePass(str + "  可能是用户名");
                                                             SavePass("\r\n");
                                                            m_ctrlIE.InsertItem(0, _bstr_t(value)+_bstr_t("  【可能是用户名或其他需提交的内容】"));
                                                            }
                                                        }
                                                        else if(strtype.Find("PASSWORD")!=-1)
                                                        {
                                                            pInputElement->get_value(&value);
                                                            CString str(value);
                                                            m_ctrlIE.InsertItem(0, _bstr_t(value) + _bstr_t("  【应该是密码】"));
                                                            SavePass("密码是:  "+str);
                                                            SavePass("\r\n");
                                                        }
                                                    }
                                            }
                                        }
                                }
                            }
                        }
                        
                    }
                    
                }
            }
        }
    }
    
}
想请问各位有什么高见???

回复列表 (共2个回复)

沙发

看了来发贴的HTML源码:
<textarea name="content" cols="77" rows="15" class="input_style" onKeyDown="EditCode();"  onpropertychange="document.frmedit.num.value=10000-document.frmedit.content.value.length"></textarea>

是一个textarea,
把if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)))中的IID_IHTMLInputTextElement改成IID_IHTMLTextAreaElement试试.(当然pInputElement的类型也应该是IHTMLTextAreaElement

板凳

谢谢楼上的,成功了,其实这个方法我也想了,只是当时没有找到IID_IHTMLInputTextAreaElement,晕啊^_^

我来回复

您尚未登录,请登录后再回复。点此登录或注册