vc/vc mbcsmfc vs2013如何读取网页验证码?

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
关于对话框中显示数据的问题
界面.doc 7页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
你可能关注的文档:
··········
··········
我现在做了一个对话框(包含一个按钮),还写好了一个TXT文本(有300行数据,各行均显示5个数字),我的想法是按下对话框按钮之后,开始读取文本数据,并且一行一行的显示在对话框中,当然,后显示的一行不能覆盖前面显示的一行,要提行显示,并且在显示完之后,通过滚动条查看之前现实的所有数据~ 有大侠建议用richedit~我还是不太清楚,能详细解释一下吗?
#2楼 得分:10回复于: 14:35:22读一行往listbox(或类似)控件中加一行
#3楼 得分:10回复于: 14:39:32拖一个Edit Box控件(拉的尽量大), 选择Multiline , AutoHScroll, AutoVScroll风格 往里面插数据就OK
#4楼 得分:10回复于: 14:42:44你的数据要修改不?如果不修改,ClistCtrl就可以。如果要修改,ClistCtrl就麻烦点,可以使用CRichEdit。 这些都可以满足你的要求。 具体实现上,画一个ListCtrl,然后给你的Dialog榜定一个ClistCtrl的对象。 然后读取文件,每读取一条记录,给ClistCtrl InsertItem就可以了。
#5楼 得分:10回复于: 14:46:35引用楼主 wangjix 的回复: 之前发了一篇求助帖,可能自己没有说清楚,让很多好心解答的大侠都无语了,这次要讲清楚了,请教各位~ 我现在做了一个对话框(包含一个按钮),还写好了一个TXT文本(有300行数据,各行均显示5个数字),我的想法是按下对话框按钮之后,开始读取文本数据,并且一行一行的显示在对话框中,当然,后显示的一行不能覆盖前面显示的一行,要提行显示,并且在显示完之后,通过滚动条查看之前……
CStdioFile类ReadString一行一行的读,伪代码 CStdioF file.Open(...,...); CString strLine(_T(&&)); CString strText(_T(&&)); while(file.ReadString(strLine)) { ? strText += strLine + _T(&\r\n&); } file.Close(); SetDlgItemText(IDC_EDIT1, strText); // 编辑框勾上Multiline,Auto HScroll/VScroll等熟悉
#6楼 得分:10回复于: 14:48:46当然可以实现。可以用CEdit来显示从文件中读取的每行的数据,当然也可以选择CListBox。以CEdit为例,将CEdit控件设置为多行、自动向下滚动、只读等属性,比如将CEdit控件定义为m_editShow。当点击按钮的时候,在消息响应函数里面,先打开需要读的文件file,然后 CString strRow, str = _T(&&); BOOL bContinue=TRUE; while(bContinue) { ? bContinue=file.ReadString(strRow); ? strRow += &\r\n&; ? str += strR } m_editShow.SetWindowText(str); 从文件中一行一行的读取数据,然后显示在CEdit控件中,最后别忘记关闭文件。
#8楼 得分:10回复于: 16:54:54有大侠建议用richedit~我还是不太清楚,能详细解释一下吗?? ============ 你的要求很简单,用EDIT就行了,不用richedit了,你对显示的字符又什么太多的要求,用CStdioFile一行行的读出来,每读出一行就加在一个CString中。注意要加“\r\n”换行。 然后用SetDlgItemText或是SetWindowText将读出来的东西写到EDIT中就行了。
#9楼 得分:5回复于: 17:29:00用CListCtrl 控件就可以@
#10楼 得分:5回复于: 11:00:26新手路过,学习一下。
#11楼 得分:0回复于: 14:42:20引用 6 楼 totti1006 的回复: 当然可以实现。可以用CEdit来显示从文件中读取的每行的数据,当然也可以选择CListBox。以CEdit为例,将
正在加载中,请稍后...
43页15页26页18页36页33页16页11页24页11页技术资料(915)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
(1)(1)(11)(1)(6)(7)(7)(9)(21)(8)(10)(3)(18)(41)(51)(6)(22)(16)(4)(1)(4)(7)(2)(6)(1)(8)(4)(4)(5)(1)(6)(3)(51)(59)(52)(63)(8)(11)(22)(11)(36)(96)(13)(4)(11)(9)(24)(90)(28)(31)(14)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'10621人阅读
C、VC/MFC(174)
F、Socket(29)
这两天,本来想花点时间研究一下QQ空间、农场外挂,于是抓包分析一了下,只可惜,在QQ网页登录时进行了加密处理,可惜我对网页编程一窍不通。有些朋友曾讲过那些是通过JS代码进行加密,可惜我JS也是一片空白,真是&出师未杰身先死&,惭愧惭愧......
于是只好挑CSDN这类简易一些的尝试学习一下(仅供学习交流),下面是学习笔记:
程序运行截图:
1、本机环境:Windows XP SP3、ADSL
2、开发工具:WildPackets OmniPeek V5.1.4
&&&&&&&&&&&&&&&&&&& Visual C++ 6.0
&&&&&&&&&&&&&&&&&&& IE6.0
&&&&&&&&&&&&&&&&&&& FlexEdit V2.3.1871
3、数据包截图:
(QQ登录时,在密码2222加密时卡壳了,我尝试过很多加密算法,最终以失败告终......)
4、验证码显示使用IStream和IPicture来显示:
/************************************************************************/
/* 函数说明:获取应用程序当前目录
/* 返 回 值:返回目录路径、CString类型字符串
/* By:Koma
/************************************************************************/
CString C***Dlg::GetExePath()
char pathbuf[260];
pathlen = ::GetModuleFileName(NULL,pathbuf,260);
// 替换掉单杠
while(TRUE)
if(pathbuf[pathlen--]=='//')
pathbuf[++pathlen]=
/************************************************************************/
/* 函数说明:下载验证码图片
/* 返 回 值:无
/* By:Koma
/************************************************************************/
void C***Dlg::DownURLImage()
CInternetSession
buff[512];
// 产生八位随机数数组成验证码
nRand1 = rand()%00;
nRand2 = rand()%00;
strUrl.Format("http://passport.csdn.net/ShowExPwd.aspx?temp=%d%d",nRand1,nRand2);
strPath = GetExePath() + "//test.tmp";
pFile = session.OpenURL(strUrl);
out.Open(strPath, CFile::modeCreate | CFile::modeWrite);
while(pFile-&Read(buff,512)){
out.Write(buff,512);
out.Flush();
out.Close();
/************************************************************************/
/* 函数说明:显示验证码图片
/* 返 回 值:无
/* By:Koma
/************************************************************************/
void C***Dlg::ShowImage()
::CoInitialize(NULL);
// 初始化COM
CString strP
CPaintDC dc(this);
strPath = GetExePath() + "//test.tmp";
file.Open(strPath, CFile::modeRead | CFile::shareDenyNone);
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
// 由HGLOBAL得到IStream,参数TRUE 表示释放IStream的同时,释放内存
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream );
ASSERT(SUCCEEDED(hr));
hr = ::OleLoadPicture(pStream, dwSize, TRUE, IID_IPicture,(LPVOID *)&pPicture);
ASSERT(hr==S_OK);
long nWidth,nH
// 宽高 MM_HIMETRIC模式,单位是0.01毫米
pPicture-&get_Width( &nWidth );
pPicture-&get_Height( &nHeight ); // 高
CSize sz(nWidth,nHeight);
// 原大显示
dc.HIMETRICtoDP(&sz);
// 转换MM_HIMETRIC模式单位为MM_TEXT像素单位
pPicture-&Render(dc.m_hDC,10,100,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL);
CRect rect(10,100,sz.cx + 10,sz.cy + 100);
// 将图片区域保存,以便后面只刷新图片区域
m_PicRect =
if(pPicture)
// 释放IPicture指针
pPicture-&Release();
if(pStream)
// 释放IStream指针,同时释放hMem
pStream-&Release();
::CoUninitialize();
5、经过OmniPeek抓包分析得到:
登录时POST格式:
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTEyMzU0NzEzNDkPFgIeCkZpbmlzaFN0YXlnFgJmD2QWBAIBDxYCHgRUZXh0BQznlKjmiLfnmbvlvZVkAgIPZBYCAgMPZBYCAgEPFgIeB1Zpc2libGVoZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgUeY3RsMDAkQ1BIX0NvbnRlbnQkY2JfU2F2ZVN0YXRlBR1jdGwwMCRDUEhfQ29udGVudCRJbWFnZV9Mb2dpbjFp31Bt8XH%2B3e%2Bh97Uk6ofQQady&ctl00%24CPH_Content%24tb_LoginNameOrLoginEmail=testkoma&ctl00%24CPH_Content%24tb_Password=ningyusky&ctl00%24CPH_Content%24tb_ExPwd=BZTS3&ClientKey=c77f51c7-cbaf-427d-f79847&ctl00%24CPH_Content%24cb_SaveState=on&from=http%3A%2F%2Fhi.csdn.net%2F&MailParameters=&PrePage=&MailParameters=&ctl00%24CPH_Content%24Image_Login.x=33&ctl00%24CPH_Content%24Image_Login.y=13
至于其他动作的话,自己抓包分析吧!
之前看到一篇文章关于C#写的CSDN提交表单
所以在前辈的基础上,我增加了VC获取Cookie ClientKey值,下面是POST代码:
void C***Dlg::OnBtnLogin()
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_strUser.IsEmpty())
MessageBox("用户名不能为空!","提示",MB_ICONERROR | MB_OK);
(CEdit*)GetDlgItem(IDC_EDIT_USER)-&SetFocus();
if( m_strPassword.IsEmpty())
MessageBox("密码不能为空!","提示",MB_ICONERROR | MB_OK);
(CEdit*)GetDlgItem(IDC_EDIT_PASSWORD)-&SetFocus();
CInternetSession S
CHttpConnection *pHttpConnect = Session.GetHttpConnection("passport.csdn.net") ;
if( pHttpConnect )
CHttpFile* pFile = pHttpConnect-&OpenRequest( CHttpConnection::HTTP_VERB_GET,
_T("/UserLogin.aspx"),
INTERNET_FLAG_NO_COOKIES );
// 获取COOKIE ClientKey值
CInternetSession S
Session.OpenURL("http://passport.csdn.net/UserLogin.aspx");
if(!Session.GetCookie("http://passport.csdn.net/UserLogin.aspx",
_T("ClientKey"),m_strCookies))
MessageBox("获取Cookies时出错!");
CString strKey = m_strC
= strKey.Find("ClientKey=",0);
m_strClientKey = strKey.Mid(result+10);
UpdateData(TRUE);
CString szFormData = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE4NDgzMDI2NjcPFgIeCkZpbmlzaFN0YXloFgJmD2QWBAIBDxYCHgRUZXh0BQznlKjmiLfnmbvlvZVkAgIPZBYCAgMPZBYCAgEPFgIeB1Zpc2libGVoZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgUeY3RsMDAkQ1BIX0NvbnRlbnQkY2JfU2F2ZVN0YXRlBR1jdGwwMCRDUEhfQ29udGVudCRJbWFnZV9Mb2dpbr5SL%2FGtMqVCJ%2FCh4jH%2FXp4DhlVU&ctl00%24CPH_Content%24tb_LoginNameOrLoginEmail="+ m_strUser +"&ctl00%24CPH_Content%24tb_Password="+ m_strPassword +"&ctl00%24CPH_Content%24tb_ExPwd="+ m_strCode +"&ClientKey="+ m_strClientKey +"&ctl00%24CPH_Content%24cb_SaveState=on&from=http%3A%2F%2Fhi.csdn.net%2Fmy.html&MailParameters=&MailParameters=&ctl00%24CPH_Content%24Image_Login.x=26&ctl00%24CPH_Content%24Image_Login.y=11";
if (pFile)
pFile-&AddRequestHeaders("POST /UserLogin.aspx HTTP/1.1/r/n");
pFile-&AddRequestHeaders("Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/QVOD, application/QVOD, */*/r/n");
pFile-&AddRequestHeaders("Referer:
http://passport.csdn.net/UserLogin.aspx/r/n");
pFile-&AddRequestHeaders("Accept-Language:
zh-cn/r/n");
pFile-&AddRequestHeaders("Content-Type:
application/x-www-form-urlencoded/r/n");
pFile-&AddRequestHeaders("Accept-Encoding:
gzip, deflate/r/n");
pFile-&AddRequestHeaders("User-Agent:
Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1; POTU(RR::5513822); Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; CIBA)/r/n");
pFile-&AddRequestHeaders("Connection:
Keep-Alive/r/n");
pFile-&AddRequestHeaders("Cache-Control:
no-cache/r/n");
pFile-&AddRequestHeaders(szFormData);
pFile-&SendRequest();
// 返回的HTML
while (pFile-&ReadString(s))
//MessageBox(str);
pFile-&Close();
file.Open("Test.aspx",CFile::modeCreate | CFile::modeWrite,NULL);
file.Write(str,str.GetLength());
file.Flush();
file.Close();
pHttpConnect-&Close() ;
delete pHttpC
wchar_t* pWChar = NULL;
// 将新浪网页UTF-8格式编码转换成Unicode
nLen1 = MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pWChar,0);
pWChar = new wchar_t[nLen1 + 1];
memset(pWChar,0,(nLen1 + 1 ) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pWChar,nLen1);
char* pChar = NULL;
DWORD nLen2;
nLen2 = WideCharToMultiByte(CP_ACP,0,pWChar,nLen1,pChar,0,NULL,NULL);
pChar = new char[nLen2 + 1];
memset(pChar,0, nLen2 + 1);
WideCharToMultiByte(CP_ACP,0,pWChar,nLen1,pChar,nLen2,NULL,NULL);
// 查找登录时服务器时返回的信息
str.Format("%s",pChar);
MessageBox(str);
catch( CInternetException *e )
e-&Delete();
(编程水平有限,其中代码并没有经过严格测试,难免有所不足,敬请谅解!)
6、源代码下载:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:925659次
积分:14046
积分:14046
排名:第944名
原创:305篇
转载:33篇
评论:840条
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 vc 9.0 sp1 mfc 的文章

 

随机推荐