请问IE浏览器里的文本字段读取问题。。
请问各位高手:
问题1、如何通过遍历的方式读取IE浏览器的字段(如input,textarea,..)的值?
我知道的方法是读取HTML源文件的,先讲一下那个程序的过程:先通过WM_HTML_GETOBJECT取得控件的IHTMLDocument2接口,如pHDoc2,然后采取元件遍历方式:
if(pHDoc2==NULL)return;
CComPtr<IHTMLElementCollection> pAllColl;
HRESULT hr;
hr=pHDoc2->get_all(&pAllColl);
if(hr==S_OK){
LONG length=0;
hr=pAllColl->get_length(&length);
if(hr==S_OK){
for(int i=0;i<length;i++){
VARIANT vIndex,vName;
vName.vt=vIndex.vt=VT_I4;
vName.lVal=vIndex.lVal=i;
CComPtr<IDispatch> pDisp;
hr=pAllColl->item(vName,vIndex,&pDisp);
if( hr==S_OK ){
CComPtr<IHTMLElement> pElement;
hr=pDisp->QueryInterface(IID_IHTMLElement,(void**)&pElement);
if( hr==S_OK ){
CComBSTR tagName;
hr=pElement->get_tagName(&tagName);
if(hr==S_OK){
CString str(tagName);
if(str=="HTML"){
CComBSTR pContent;
hr=pElement->get_outerHTML(&pContent);
if(hr==S_OK){
SaveAndShow(pContent);
i=length;//以便退出循环
}
else{//if get_outerHTML failed
AfxMessageBox("can't get html code");
}
}//else if tagName isnot 'HTML'
}//else if get_tagName failed
}//else if don't get IHMTLElement interface
}//if no items
}
}//if get_length failed
}//if get_all failed
pHDoc2->Release();
这样就读出了html源文件,即采用一个IHTMLElement的集合Collection,然后进行遍历,找到html的TAG,然后读的。
同时我还发现有一个类似的读取鼠标点击框文本显示过程,是采用IHTMLInputTextElement,即先找到鼠标点击处的Element,然后用:
CComPtr<IHTMLInputTextElement> pElement;
hr=pDisp->QueryInterface(IID_IHTMLInputTextElement,(void**)&pElement);
然后用get_value读取文本的。这个程序只能单独取一个文本框的值。
而我的意图是不用鼠标点击文本框,而是在网页提交的时候,VC程序自动读取网页内的所有文本框内的值并记录下来,所以必须解决网页InputTextElement的遍历问题。我试图找到一个IHTMLInputTextElement的集合Collection,但是没有,那样我如何通过遍历的方式找到网页中的文本框并取得值呢?讲了这大半天,也不知道讲明白没有,如果不清楚,请告诉我,我马上补充,谢谢。
问题2、网页提交有几种办法,(我不是指get 和submit,呵呵),我是指回车提交和用鼠标点提交按钮两种可能的操作方式,这样会产生许多消息,典型消息是什么呢?也就是说,我如何才能从众多的消息只识别出只有网页提交才会出现的消息呢?消息中有句柄的内容么?
以上回答任一问题均有分,谢谢!