近日由于在华为培训,期间因为导师们忙得要紧,没那么多时间去教导我们,只是给我们看文档和代码,看完了,没事就想出这个来玩玩了。这里要先用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 < iRet) { strncpy(&cKey, buf+i, 1); pPwd->SendMessage(WM_CHAR, (WPARAM)cKey, 0); i++; } break; } } pCwnd = pCwnd->GetNextWindow(GW_HWNDNEXT); } |
三、当填充好号码和密码后就可以发送单击鼠标消息,让QQ登陆了。
| //以下为找到登陆按钮后,发送鼠标单击消息 CButton *pbtnLogin = (CButton *)pWnd->GetDlgItem(16032); if (pbtnLogin) { pbtnLogin->PostMessage(WM_LBUTTONDOWN, 0, 0); pbtnLogin->PostMessage(WM_LBUTTONUP, 0, 0); } |
四、要让QQ自动登陆,只要加个WM_TIMER就可以了,至于这个大家都会的了,这里不再讲述。
五、结束语:
这里使用到的技术就是向别的进程发送(数据)消息,主要就是要找到对方进程接收消息的句柄(这里用了SPY++),找到后就可以向其它发送(数据)消息了。比如我前几天帮别人装了个PP,但是PP有个浏览器,只要你开PP这个东东就会出来,我觉得非常碍眼,就可以给它 发送一个WM_HIDE消息。其它的大家可以随意发挥了!
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·QQ病毒 (4174篇文章)
·QQ个性签名汇总 (2292篇文章)
·QQ表情 (2123篇文章)
·QQ专题 (2123篇文章)
·QQ头像 (2123篇文章)
·常用软件加密宝典 (6680篇文章)
·杀毒软件专栏 (6077篇文章)
·软件插件 (6374篇文章)
·QQ个性签名汇总 (2292篇文章)
·QQ表情 (2123篇文章)
·QQ专题 (2123篇文章)
·QQ头像 (2123篇文章)
·常用软件加密宝典 (6680篇文章)
·杀毒软件专栏 (6077篇文章)
·软件插件 (6374篇文章)
·VC++动态链接库(DLL)编程深入浅出(二) (12257次浏览)
·VC++动态链接库(DLL)编程深入浅出(一) (11493次浏览)
·VC++动态链接库(DLL)编程深入浅出(三) (8377次浏览)
·深入浅出VC++串口编程之基于控件 (3136次浏览)
·深度解析VC中的消息传递机制 (2910次浏览)
·应用MFC开发高级应用程序 (2736次浏览)
·在VC中链接动态链接库的方法简要说明 (1328次浏览)
·用MFC ODBC操作Access数据库 (1228次浏览)
·最常见的20种VC++编译错误信息集合 (1195次浏览)
·制作HTML帮助 (1130次浏览)
·VC++动态链接库(DLL)编程深入浅出(一) (11493次浏览)
·VC++动态链接库(DLL)编程深入浅出(三) (8377次浏览)
·深入浅出VC++串口编程之基于控件 (3136次浏览)
·深度解析VC中的消息传递机制 (2910次浏览)
·应用MFC开发高级应用程序 (2736次浏览)
·在VC中链接动态链接库的方法简要说明 (1328次浏览)
·用MFC ODBC操作Access数据库 (1228次浏览)
·最常见的20种VC++编译错误信息集合 (1195次浏览)
·制作HTML帮助 (1130次浏览)
·属性表标签上的位图在MFC,CB下的实现 10-09
·采用 MFC 编制 MVC 模式之球体演示程序 10-09
·MFC架构下的DirectX8 10-09
·用VC++创建自定义向导程序 10-09
·VC++中的函数调用惯例 10-09
·VC++中的自定义消息 10-09
·一个在MFC环境中使用的 InfoZip打包类 10-09
·VC++中如何使文件夹浏览呈现新界面 10-09
·MFC Activex 录音机控件 10-09
·MFC程序员的WTL指南(1)中文版序言 10-09
·采用 MFC 编制 MVC 模式之球体演示程序 10-09
·MFC架构下的DirectX8 10-09
·用VC++创建自定义向导程序 10-09
·VC++中的函数调用惯例 10-09
·VC++中的自定义消息 10-09
·一个在MFC环境中使用的 InfoZip打包类 10-09
·VC++中如何使文件夹浏览呈现新界面 10-09
·MFC Activex 录音机控件 10-09
·MFC程序员的WTL指南(1)中文版序言 10-09
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容




