Delphi制作QQ自动登录器源码

 http://www.cnblogs.com/sunsoft/archive/2011/02/25/1964967.html

以TM2009为例,检查了一下,未登录之前一个窗体,上边两个控件,登录以后,窗体捕获到一个控件,根据这个,首先找到QQ登录框,输入用户名,密码的位置,获取窗体句柄的具体代码如下:

这里先定义了一个record类型,

1   TQQWnd= record

2     QQWnd,QStatusWnd: HWND;  //QQ窗口句柄,QQ弹出登录状态句柄

3     QQNumWnd, QQPassWnd: HWND; //QQ号码输入句柄,QQ密码输入句柄

4   end;

5

1   function GetQQLoginHwdvar A QQWnd: TQQWnd: Boolean;

2   var

3     WinTitle: array[0..254] of Char;

4     WinClass: array[0..254] of Char;

5   begin

6     Result:= False;

7     A QQWnd.QQWnd:= 0;

8     A QQWnd.QQNumWnd:= 0;

9     A QQWnd.QQPassWnd:= 0;

10     A QQWnd.QQWnd:= FindWindownil, 'TM2009';

11     while A QQWnd.QQWnd<> 0 do begin

12       A QQWnd.QQNumWnd:= FindWindowExAQQWnd.QQWnd, 0, 'A TL:30A 4D1D8', nil;

13       A QQWnd.QQPassWnd:= FindWindowExAQQWnd.QQWnd, 0, 'Edit', nil;

14       if AQQWnd.QQNumWnd<> 0and AQQWnd.QQPassWnd<> 0 then begin

15         Result:= True;

16         FOpened:= True;

17         Exit;

18       end else begin

19         A QQWnd.QQWnd:= GetWindowAQQWnd.QQWnd, GW_HWNDNEXT;

20         if A QQWnd.QQWnd=0 then Continue;

21         GetWindowTextAQQWnd.QQWnd, @WinTitle, SizeOfWinTitl;

22         if WinTitle<>'TM2009' then Continue;

23       end;

24     end;

25   end;

26

因为腾讯的密码输入框,采用的低级钩子,然后定时的释放,建立钩子这种方式来防止木马顺序去捕获,尝试了下,直接的用Sendmessag去发送密码信息,没反应,因此这里我采用了SendInput方式去输入密码,而用户框因为没有做任何的维护措施,所以可以直接的通过发送消息,将QQ账户信息给赋值过去,具体代码为

1       SetForegroundWindowQQWnds.QQWnd; //QQ窗体设置为活动窗体

2       //设置QQ号码

3        SendMessagQQWnds.QQNumWnd,WM_SETFOCUS,0,0; //聚焦至QQ号码输入框

4       Sleep20;

5       SendMessagQQWnds.QQNumWnd,WM_SETTEXT,0,LPA RA MFQQNum; //设置QQ号码

6

7       SendMessagQQWnds.QQPassWnd,WM_SETFOCUS,0,0; //聚焦密码输入框

8       Sleep20;

9       //设置QQ密码

10       SIKeyInputFQQPass, 10; //QQ密码采取SENDINPUT方式

11

12

13

解下来要操作的就是设置登录方式了譬如说“线上”隐身”等状态,由于腾讯的登录窗体是采用的GUI所以是捕获不到句柄的只能通过坐标来捕获,之前的时候,用的固定坐标,然后有的电脑可以用,有的不能用,后来才发现,由于腾讯的界面可以拉动,只要一拉动,坐标位置就变了因此我这里采取相对坐标,根据QQ密码框的坐标,来设置点击的坐标。腾讯的状态是窗体上点击以后,弹出一个跟登录框平级的窗口,因此点击以后,需要检测是否弹出选择状态窗口,找到那个窗口句柄以后,再发送相应的点击命令,这样就完成整个的流程了

1 const

2   QQStatusYA rray: array[0..5] of Integer= 19, 38, 62, 86, 105, 131;

3

4

5       ClickTimes:= 0; //为防止有的时候点击过程中出现其他不可预料的错误,这里可以重复点击三次

6       QQWnds.QStatusWnd:= 0; //设置QQ状态初始句柄为0

7       //鼠标点击

8       while ClickTimes<3 do begin

9         PostMessagQQWnds.QQWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+21,4+IntToHexQQNumRec.Left-QQRect.Left+25,4; //发送点击消息,这里如果采用SendMessag会死线程,因此我采用了PostMessage

10         PostMessagQQWnds.QQWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+21,4+IntToHexQQNumRec.Left-QQRect.Left+25,4;

11         Sleep200;

12         QQWnds.QStatusWnd:= FindWindow'TXGuiFoundation','TXMenuWindow'; //检测是否存在QQ设置状态窗体

13         if QQWnds.QStatusWnd<>0 then begin

14           try

15             PostMessagQQWnds.QStatusWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQStatusYA rray[FQQStatus],4+IntToHex27,4; //如果存在窗体,直接的发送点击信息

16             PostMessagQQWnds.QStatusWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQStatusYA rray[FQQStatus],4+IntToHex27,4;

17           except

18           end;

19           Break;

20         end;

21         ClickTimes:=ClickTimes+1;

22       end;

23       if QQWnds.QStatusWnd=0 then begin //如果一直没有捕捉到设置状态窗体,顺序则自动退出

24         Task.Comm.SendMSG_QQ_ERR, IntToStrQQRect.Left+''+ IntToStrQQRect.Top+ ''+ In

tToStrQQRect.Right+ ''+ IntToStrQQRect.Bottom

25           +''+ IntToStrQQNumRec.Left+''+ IntToStrQQNumRec.Top+ ''+ IntToStrQQNu

mRec.Right+ ''+ IntToStrQQNumRec.Bottom

26           + IntToStrQQNumRec.Bottom- QQRect.Top+21+'设置状态失败';

27 //        Task.Comm.SendMSG_QQ_ERR, IntToStrQQNumRec.Left-QQRect.Left+25+''+ IntToStrQQNumRec.Bottom- QQRect.Top+21+'设置状态失败';

28         Exit;

29       end;

30

最后,直接的点击登录按钮就可以了这个地方,也是要计算相对于密码输入框的坐标

1       //点击登录按钮

2       try

3         PostMessagQQWnds.QQWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+114,4+IntToHexQQNumRec.Left-QQRect.Left+64,4;

4         PostMessagQQWnds.QQWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+114,4+IntToHexQQNumRec.Left-QQRect.Left+64,4;

5       except

6       end;

7

至此,整个的流程完毕了最后,还可以增加上检测该QQ号码是否已经登录

以下是最后进去的界面,直接的将QQ信息保管在数据库当中,密码采用了AES加密,所以也不用担心密码信息被泄

Delphi制作QQ自动登录器源码的更多相关文章

  1. QQ自动登录Demo源码(附全套WindowsApi)

    在开发过程中,偶尔会有自动化操作软件的需求,便想到用句柄实现自动化的功能,记录下知识点,以作备忘. 实现流程: 获取窗口句柄,根据定位获取input,调用windowsapi模拟鼠标点击, 输入 , ...

  2. C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码

    C++.VC++.MFC网页自动注册.登陆.发帖.留言,QQ注册.QQ申请器源码.注册邮箱源码.自动发帖源码   参考资料: 自动登录yahoo邮箱http://blog.csdn.net/suisu ...

  3. android文件管理器源码、斗鱼直播源码、企业级erp源码等

    Android精选源码 文件清理管理器 自定义水平带数字的进度条以及自定义圆形带数字的进度条 利用sectionedRecyclerViewAdapter实现分组列表的recyclerView源码 流 ...

  4. linux调度器源码分析 - 初始化(二)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明 ...

  5. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  6. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权

    代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...

  7. 32.修改IK分词器源码来基于mysql热更新词库

    主要知识点, 修改IK分词器源码来基于mysql热更新词库     一.IK增加新词的原因 在第32小节中学习到了直接在es的词库中增加词语,来扩充自已的词库,但是这样做有以下缺点: (1)每次添加完 ...

  8. Linux 内核调度器源码分析 - 初始化

    导语 上篇系列文 混部之殇-论云原生资源隔离技术之CPU隔离(一) 介绍了云原生混部场景中CPU资源隔离核心技术:内核调度器,本系列文章<Linux内核调度器源码分析>将从源码的角度剖析内 ...

  9. Android音乐播放器源码(歌词.均衡器.收藏.qq5.0菜单.通知)

    一款Android音乐播放器源码,基本功能都实现了 qq5.0菜单(歌词.均衡器.收藏.qq5.0菜单.通知) 只有向右滑动出现,菜单键和指定按钮都还没有添加. 源码下载:http://code.66 ...

随机推荐

  1. css深入理解relative

    第一讲     relative和absolute相煎关系 同源性 .position:relative .position:absolute 限制作用 1.限制left/top/right/bott ...

  2. HDU 4671 Backup Plan 构造

    负载是否平衡只与前两列有关,剩下的只要与前两列不重复就随便放. 第一列我们按1-n这样循环放,第二列每次找个数最少的那个服务器放. #include <cstdio> #include & ...

  3. hadoop2.5.2学习及实践笔记(三)—— HDFS概念及体系结构

    注:文中涉及的文件路径或配置文件中属性名称是针对hadoop2.X系列,相对于之前版本,可能有改动. 附: HDFS用户指南官方介绍: http://hadoop.apache.org/docs/r2 ...

  4. 想玩API,这些套路我来告诉你!

    小伙伴是不是时常听说各种api接口的问题呢,可能许多人第一感觉:那是什么个玩意儿,那么多人回去研究它,今天思梦PHP小编就来为你揭开他的神秘的面纱,先看一下百度百科上面的官方的解释: 其实说白了就是为 ...

  5. file mmap

    do_set_pmd 统计参数只会在这里设置: add_mm_counter(vma->vm_mm, MM_FILEPAGES, HPAGE_PMD_NR); 但是这貌似都是处理大页的情况哪,小 ...

  6. Android中如何为自定义控件增加状态?

    在android开发中我们常常需要对控件进行相关操作,虽然网上已有很多对控件酷炫的操作,但小编今天给大家分享的纯属实用出发.在查看了一些列安卓教程和文档后,发现了一位大牛分享的非常不错的有关andro ...

  7. [2018-9-4T2]探索黑暗dark

    题目大意:有一棵树,第$i$个点的点权为$s_i(s_1>0)$.初始有每个点都是亮的.$m$次修改,每次改变一个点的亮暗,回答包含$1$的全亮的连通块中点权和最大的连通块的和的值. 题解:正解 ...

  8. ubuntu启动报错 Errors were found while checking the disk-drive for /

    开机报这个错误,主要原因是硬盘检测不通过导致的,下面介绍两种方法规避该问题: 修改grub 这个方法网上比较多,直接贴过来: 进入Ubuntu启动菜单时,光标选中 *Ubuntu 后,按键盘上的 e ...

  9. 引进js文件运行在浏览器上调试报文件找不到

    原因是jsp文件的路径和js文件不在同一目录下,用"../"将它们的路径配置在同一路径下或者在路径前面加上"<%= request.getContextPath() ...

  10. 文件夹操作-DirectoryInfo类

    DirectoryInfo类是一个密封类,它可以用来创建.移动.枚举目录和子目录.DirectoryInfo类包括4个属性,可以用来获取目录的名称.父目录等. DirectoryInfo类的属性表 属 ...