Delphi向QQ2011窗口发送登录消息
目前的QQ2011版本中,其登陆界面上除了QQ号输入框和密码输入框,其他的的按钮都是绘图绘上去的,均无窗口句柄。
QQ登录窗口的窗口类为'TXGuiFoundation',窗口标题为'QQ2011'。
QQ账号输入框的窗口类为'TXEdit',窗口标题为空,密码输入框的窗口类为'Edit',窗口标题是动态的'A~Z'。
由于登陆界面的【登录】按钮无窗口句柄,因此无法向按钮发送消息,由此猜想其界面的所有操作均是通过特定消息来操作的。
但是向登录窗口发送WM_LBUTTONDOWN和WM_LBUTTONUP消息来模拟鼠标点击登录按钮的操作无任何反应。
通过Spy++监测QQ2011登录过程中的消息流发现,其消息基本都是直接发送至登录窗口的,所以逐条查看带有WM_LBUTTONDOWN
和WM_LBUTTONUP消息的地方 ,并发现一组 WM_LBUTTONDOWN、 WM_LBUTTONUP ,查看消息属性发现WM_LBUTTONDOWN
消息中的wParam参数为$00000001,lParam参数为$00FD013A,WM_LBUTTONUP消息的wParam参数为$00000000,lParam参数为$00FD013A。
因此猜想模拟鼠标点击登录按钮的消息中, lParam参数为$00FD013A代表这是个用于登录按钮的WM_LBUTTONDOWN或WM_LBUTTONUP消息,而
wParam参数为$00000001、 $00000000 正好区分了 WM_LBUTTONDOWN、WM_LBUTTONUP消息。经测试此猜想正确,发送登录消息成功!
经反复监测鼠标点击登录按钮的消息流发现WM_LBUTTONDOWN、WM_LBUTTONUP的lParam参数是一个范围值并非固定值,除了$00FD013A,还有
$00F80137等等等~具体范围木有时间去测试确定了~
源代码如下:
1 program OneKeyRun;
2
3 uses
4 Windows,ShellAPI,Messages;
5 {$R *.Res}
6
7 var
8 WinHandle:Integer=0;
9 Count:Integer=0;
10
11 begin
12 ShellExecute(0,'Open','E:\Program Files\Tencent\QQ\Bin\qq.exe',nil,nil,SW_SHOW);
13 repeat
14 begin
15 Sleep(5000);
16 WinHandle:=FindWindowEx(0,0,'TXGuiFoundation','QQ2011');
17 Inc(Count);
18 end;
19 until (WinHandle>0) or (Count>200);
20 if WinHandle>0 then
21 begin
22 PostMessage(WinHandle,WM_LBUTTONDOWN,$00000001,$00FD013A);
23 PostMessage(WinHandle,WM_LBUTTONUP,$00000000,$00FD013A);
24 end;
25 end.
本文章及程序源码旨在分析技术,省去手动登录多个QQ的麻烦,不含有任何恶意破坏和攻击的企图。
转载于:https://www.cnblogs.com/KeyWolf/archive/2011/12/04/2275290.html
- 点赞
- 收藏
- 分享
- 文章举报
- delphi编程中的棘手问题;求指教!
- 在DELPHI程序中自动设置ODBC数据源
- Delphi粗边框
- 由Delphi程序改写Sql(2000)的存储过程
- Delphi发email
- 用Delphi 向量算法 判断点是否在线上
- Delphi 删除控件问题
- 继续Delphi调用Wcf
- Delphi 调用WCF 搞定啦
- Quick Report 说明 for delphi 7
- DELPHI7下用superobject读取中国天气网的JSON数据的天气预报
- 刚学 Delphi 请多指教
- delphi学习总结
- Delphi中的记录
- Delphi中的Free和Nil之理解
- delphi简单字符的加密与解密
- Delphi控件开发基础篇
- 关于DELPHI XE4 开发 IOS APP问题
- Delphi 封装(2)类的封装
- delphi中如何让主窗体在程序运行之初不显示