中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > COM技术
如何获取网页中的密码和文本输入框的内容
作者:未知 时间:2005-07-20 14:21 出处:VC知识库 责编:chinaitpower
              摘要:如何获取网页中的密码和文本输入框的内容

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

下载示例工程

一、介绍
网页中的密码输入框和一般不同,它没有句柄之类的,但是通过获取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("  【应该是密码】"));
															}
														}
												}
										}
								}
							}
					}
					
				}
				
			}
			
		}
    }
注意:由于我也比较懒,本文框架是采用一篇名为《如何控制IE的行为》...在这里感谢原文作者,但是本文的主要代码是我写的,(其实自己写一个框架也太简单了,但是我还要上班啊 :( 请原谅!)最好不要向作者要技术支持!谢谢阅读!

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有