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

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

用VC 制作QQ自动登陆软件

作者:李佳颖(niying)

下载源代码
逆风编程精品

  近日由于在华为培训,期间因为导师们忙得要紧,没那么多时间去教导我们,只是给我们看文档和代码,看完了,没事就想出这个来玩玩了。这里要先用SPY 来找到QQ登陆框的各个窗口标题或ID号。


 

原理:其实不难,只要找到QQ登陆框的号码输入和密码输入框,然后向其填数据就是了。这里填数据就是向其发送消息,模拟键盘 罢了。

一、先是查看QQ登陆框是否开启,否则开启它。


    //找QQ的登陆对话框,如果QQ没有启动,则先启动它。

    pWnd = FindWindow(_T("#32770"), _T("QQ用户登录"));

    if (!pWnd)

    {

           PROCESS_INFORMATION lpProcessInformation;

           STARTUPINFO startupinfo;

           memset(&startupinfo,0,sizeof(STARTUPINFO));

           memset(&lpProcessInformation,0,sizeof(PROCESS_INFORMATION));

           startupinfo.cb = sizeof(STARTUPINFO);

           startupinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;

           startupinfo.dwX = 0;

           startupinfo.dwY = 0;

           startupinfo.lpDesktop = NULL;

           startupinfo.lpReserved = NULL;

           startupinfo.lpReserved2 = NULL;

           startupinfo.lpTitle = NULL;

           CreateProcess(_T("D:\\Tencent\\qq\\CoralQQ.exe"), NULL, NULL, NULL, FALSE,

                  NORMAL_PRIORITY_CLASS, NULL, NULL, &startupinfo, &lpProcessInformation);

    }
二、开启和打开后就是取得QQ的号码框和密码框的句柄了。这里要注意的是,因为QQ密码框是登陆框的子窗口,先要找到登陆框后再一步步找到QQ的密码框。找到后就是向它们发送消息了。QQ的密码框先复制到剪切板后发送WM_PASTE就可以了,但是密码框因为使用了QQ键盘加密保护技术,所以不能发送WM_PASTE,而要模拟键盘发送WM_CHAR消息,让其一个一个接收密码就可以了。

    if (pWnd)

    {

           //获得QQ的号码输入框指针

           CComboBox *pCob = (CComboBox *)pWnd->GetDlgItem(138);

           if (pCob)

           {

                  m_edtCode.SetSel(0, -1);

                  m_edtCode.Copy();



                  //先删除原有号码后向号码输入框发送复制消息

                  pCob->SetCurSel(0);

                  pCob->DeleteString(0);

                  pCob->SendMessage(WM_PASTE, 0, 0);

           }



           //因为QQ的密码框是包含在主窗口里的子窗口,所以先获得子窗口后再一个个往后找

           CWnd *pCwnd = pWnd->GetNextWindow(GW_CHILD);

           pCwnd = pCwnd->GetNextWindow(GW_HWNDNEXT);

           while (pCwnd != NULL)

           {

                  if (pCwnd)//找到

                  {

                         CEdit *pPwd = (CEdit *)pCwnd->GetDlgItem(16038);

                         if (pPwd)

                         {

                                char cKey;

                                char buf[20];

                                memset(buf, 0, sizeof(buf));

                                //因为我的程序是unicode,所以这里要转换。如果不是,则不用转换了。

                                int iRet = WideCharToMultiByte(CP_ACP, 

					WC_COMPOSITECHECK, 

					m_strPassword.GetBuffer(m_strPassword.GetLength()), 

                                       m_strPassword.GetLength(), buf, 20, NULL, NULL);



                                //清除密码框

                                pPwd->SetSel(0, -1);

                                pPwd->Clear();

                                i = 0;



                                //将密码一个个地发送过去。这里不能用复制消息,因为QQ的密码框不允许复制

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

用udp协议通讯示例
SendMessage和PostMessage,total ordering
关于调试时输出的字符串信息
创建分层窗口,实现图像渐变
关于CEdit控件的透明 --作者:monsoon
think window procedure
DCT快速变换
如何提取网页中所有链接
用C#语言实现http协议下的多线程文件传输
如何选中其他程序ListView控件中的某个Item
MFC程序员的WTL指南: Part II - WTL 界面基
COM 组件设计与应用(十)——IDispatch 接
一个简单的读写注册表实例
利用辅助线程更新用户界面UI
如何更改其它程序 ListView 控件中某个 Ite
如何在NT下获取进程的路径
ATL布幔之下的秘密(5)
定制编辑框的上下文菜单
初试驱动---OV511 摄像头驱动开发
关于SendMessage

相关评论


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

  热门关键字: