您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:188 来源:vckbase.com

本文章共1896字,分2页,当前第1页,快速翻页:
 

如何获取网页中的密码和文本输入框的内容
作者:谭昕

下载示例工程
逆风编程技术

一、介绍
网页中的密码输入框和一般不同,它没有句柄之类的,但是通过获取IE的IHTMLInputTextElement接口,就可以获取网页中的输入框(包括文本和密码输入框)的内容了。

源代码在VC知识库首页运行效果图如下:



二、具体代码

	VARIANT id, index;

	CComPtr<IDispatch> spDispatch;

	CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;

	CComPtr<IHTMLElement> pElement;

	CComPtr<IHTMLElementCollection> pElementCol;

	CComPtr<IHTMLFormElement> pFormElement;

	CComPtr<IHTMLInputTextElement> pInputElement;



	//首先获取IWebBrowser2接口

	CoInitialize(NULL);    //必须要这句初始化

	SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);

	if (m_spSHWinds == NULL)

	{

		if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)

		{

			MessageBox("Failed");

			CoUninitialize();

			

		}

	}

	

	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)

			{

				//获取IHTMLDocument2接口

				if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))

					pDoc2 = spDispatch;

				if(pDoc2!=NULL)

				{

					//    AfxMessageBox("已经获取IHTMLDocument2");

					if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))

					{

						//    AfxMessageBox("已经获取IHTMLElementCollection");

						long p=0;

						if(SUCCEEDED(pElementCol->get_length(&p)))

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

										{

											// 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())

																	m_ctrlIE.InsertItem(0, _bstr_t(value) _bstr_t("  【可能是用户名或其他需提交的内容】"));

																

															}

															else if(strtype.Find("PASSWORD")!=-1) //获取密码框的值

															{

																pInputElement->get_value(&value);

																CString str(value);

																if(!str.IsEmpty())

																	m_ctrlIE.InsertItem(0, _bstr_t(value)   _bstr_t("  【应该是密码】"));

															}

														}

												}

										}

								}

							}

					}

					

				}

				

			}

			

		}

    } 
 
本文章更多内容1 - 2 - 下一页>>
相关文章

OAL点点滴滴(二)
WTL字体类
介绍一个控制并行端口的MFC类
.NET Remoting与分布式应用开发——初识 Re
浅析三线程程序开发思路与实现
带光圈文字输出的实现
WinCE4.2 下轻松调用 Windows Media Player
C 类对象的拷贝构造函数
VC Oracle 开发入门
MFC Activex 录音机控件
深入 CSocket 编程之阻塞和非阻塞模式
如何获取其它进程中窗口的窗口过程
OAL点点滴滴(一)
精通VC与MATLAB联合编程<十>——综合举例二
如何播放 WAV 文件?
一个原创的仪表控件
WHO AM I?看定自己的耕垦区域
使用MFC的数组类
乱砍设计模式之零
通过异步程序调用(APC)实现的定时功能

相关评论


本文章所属分类:首页 VC++

  热门关键字: