高手们!进来分析一下这个QQ自动登录软件。我有几行代码看不明白。这段代码的人真是高手!不得不赞叹一下!

cen_jin_long 2008-01-07 08:48:37
CButton *pbtnLogin = (CButton *)pWnd->GetDlgItem(16032);
这一行的“16032”这个ID号是怎么样得来?用SPY++得不了这些。
CComboBox *pCob = (CComboBox *)pWnd->GetDlgItem(138);
这一行的“138”ID号是怎么样得来?也是个迷,难到作者是内部的人士?
CEdit *pPwd = (CEdit *)pCwnd->GetDlgItem(16038);
这一行是对QQ的密码框进行操作,但怎么样得到这个对话框的控件ID号?是不是内部的人写?

请各位高手进来讨论一下,怎么得到这些ID号?



void CQQLoginDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);

int i;
CWnd *pWnd = NULL;

//找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);
}

Sleep(3000);//如果你的电脑慢,那就等一下。
pWnd = FindWindow(_T("#32770"), _T("QQ用户登录"));
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);
}

//以下为找到登陆按钮后,发送鼠标单击消息
CButton *pbtnLogin = (CButton *)pWnd->GetDlgItem(16032);
if (pbtnLogin)
{
pbtnLogin->PostMessage(WM_LBUTTONDOWN, 0, 0);
pbtnLogin->PostMessage(WM_LBUTTONUP, 0, 0);
}
}
//CDialog::OnOK();
}

...全文
406 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangkeredgirl 2008-01-18
  • 打赏
  • 举报
回复
楼主你个本事给做个skpye的自动登录出来
高分相赠
cen_jin_long 2008-01-09
  • 打赏
  • 举报
回复


平均给分的按扭没出现,所以,算了。给谁也一样。

sjdev 2008-01-09
  • 打赏
  • 举报
回复
晕,这么多人捧场,怎么把分全给我了?
oldn123 2008-01-08
  • 打赏
  • 举报
回复
那段代码LZ试过么?对于QQ可以实现他的自动登陆的功能么?怎么看着有点玄呢
sunredstar 2008-01-08
  • 打赏
  • 举报
回复
好牛 啊,我好崇拜你们,我初学请多关照
Gavin001 2008-01-08
  • 打赏
  • 举报
回复
用spy++,FindWindow,FindWindowEx能得到窗提下所有资源句柄
遍历,一个一个找
simon031187 2008-01-08
  • 打赏
  • 举报
回复
可怜的QQ,估计以后连控件ID都要用动态的了
djwangping 2008-01-08
  • 打赏
  • 举报
回复
QQ的密码栏是 腾讯公司自行封装的.

对他进行操作有可能会失败~~
sjdev 2008-01-08
  • 打赏
  • 举报
回复
那就等凑够20人,把分散了吧,一人1分。
bobob 2008-01-08
  • 打赏
  • 举报
回复
spy++,跟消息
shaxing 2008-01-08
  • 打赏
  • 举报
回复
怎么找到的?
Torch009 2008-01-08
  • 打赏
  • 举报
回复
怎么找到的?
cen_jin_long 2008-01-08
  • 打赏
  • 举报
回复
实现过,零七版就不行了。
cen_jin_long 2008-01-07
  • 打赏
  • 举报
回复
WM_COMMAND wNotifyCode:EN_SETFOCUS wID:16038 hwndCtl:00070CD0 [wParam:01003EA6 lParam:00070CD0]

各位,我已经找到了!呵呵。
cen_jin_long 2008-01-07
  • 打赏
  • 举报
回复
spy++,FindWindow,FindWindowEx

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

用过这三个了,都得不到,我开SPY++将消息记录下来,一个一个查看,都没有“1638”这个字控件ID号。
sjdev 2008-01-07
  • 打赏
  • 举报
回复
无非就是spy++,FindWindow,FindWindowEx
cen_jin_long 2008-01-07
  • 打赏
  • 举报
回复
想说的是,某个窗口里边的子控件ID、句柄等等。这是正当学习,不是别的歪门。
sjdev 2008-01-07
  • 打赏
  • 举报
回复
楼主想要说的是什么?
cen_jin_long 2008-01-07
  • 打赏
  • 举报
回复
CComboBox *pCob = (CComboBox *)pWnd-> GetDlgItem(138);

这个可以用SPY++得到。但其他的不懂了。在QQ密码框做任何事情都没有反应。
jameshooo 2008-01-07
  • 打赏
  • 举报
回复
使用一些资源工具就能查看到,比如exescope
加载更多回复(1)
课程简介:课程介绍你是否在寻找机会进入自动化测试领域?你是否渴望学习selenium webdriver + Java以及**的框架和技术进行web自动化测试?你是否感兴趣学习Selenium如何用在你现有的项目里的?这门课带你从Selenium搭建环境开始讲起,然后学习常用方法,单元测试,PO设计模式, jenkins等。我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。全程手写代码,逐步迭代,方便学习。例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。这门课涵盖到基础到高级项目实战。您将会学到什么学完课程以后,你将了解Selenium Webdriver知识你将具备设计数据驱动框架、Page Object、等搭建自动化框架的能力用众多实例对Selenium现实场景应用进行深入理解了解单元测试, Jenkins, HTML报告,并发测试 你从网上随便选择一个网站,都可以尝试实现自动化,用所有可能的测试用例进行自动化测试将提高你的编码技能,以编写最优化的自动化测试用例代码你基本可以应对任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目你将能够创建漂亮的报告来打动客户或领导更深入地理解自动化指南和代码质量标准会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化【适合人群】软件手动测试人员想转为自动化测试的人员自动软件测试人员想加强专业技能的刚毕业学生想从事软件行业QA 组长或项目经理【课程优势】学完课程以后,你将拥有完整的Selenium Webdriver知识,完整的项目实战【讲师介绍】资质介绍:12年以上开发、自动测试方面经验,其中7年以上测试开发经验,现为技术架构师新书“Python3+Selenium3自动化测试项目实战”作者【课程咨询】作者联系QQ:2574674466 完善的学习文档            

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧