今朝的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消息。经测试此猜想正确,发送登录消息成功!
源代码如下:
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 Shellute(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.