思路:使用Win32 API的ShellExecute函数打开非凡vpn.exe->使用IdHTTP控件爬取网页的源代码->使用正则表达式,匹配出网页源代码中的账号密码->获取账号、密码框的句柄并发送消息将账号密码填入输入框->获取“连接”按钮句柄发送点击消息->OK。
句柄获取辅助工具:spy++
delphi主要实现代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
var //-----------打开非凡vpn,获取网页源代码
pathStr:string;
begin
![自动获取非凡VPN账号密码 杭电vpn账号密码获取](http://img.413yy.cn/images/31101031/31034134t01a7e1f09ee3b7a15b.jpg)
//获取vpn程序的路径(放在delphi程序同目录下)
pathStr:=ExtractFilePath(Application.Exename) + 'Vpn.exe';
try
//获取整个网页源码
webStr:=idHTTP1.Get('http://www.ffvpn.com/freetrial.php');
except
begin
showmessage('网络连接出错!');
Form1.Close;
end;
end;
//打开同目录下的vpn程序
ShellExecute(handle, 'open',PChar(pathStr), '',nil, SW_SHOWNORMAL);
end;
var//-----------匹配出账号密码存入数组,发送窗口句柄
hdAccount,hdPwd,hdMain,hdCon: HWND;
i,p:Integer;
reg: TPerlRegEx;
arrStr: Array[0..5] Of string;
begin
reg := TPerlRegEx.Create(nil);
//整个网页源码
reg.Subject := webStr;
//匹配表达式
reg.RegEx := '(<div class=''fl''><b>+)([a-z]{4}+)(</b></div>)';
i:=0;
//获取整个网页源码中符合匹配表达式的字符串。
while reg.MatchAgain do
begin
//把账号密码存入数组
arrStr[i]:= reg.SubExpressions[2];
i:=i+1;
end;
FreeAndNil(reg);
if ComboBox1.Text='国内VPN' then
p:=0
else
p:=2;
//主窗口句柄
hdMain:=findwindow('#32770','非凡VPN');
//连接按钮句柄
hdCon:=FindWindowEx(hdMain,0,'Button','连接');
//账号输入框句柄
hdAccount:=FindWindowEx(hdMain,0,'Edit','');
//密码输入框句柄
hdPwd:=FindWindowEx(hdMain,hdAccount,'Edit','');
if hdMain=0 then
begin
showmessage('句柄获取失败!');
form1.Close;
end
else
begin
//给"账号"输入框发送消息,传递账号
SendMessage(hdAccount,WM_SETTEXT,255,Integer(PChar(arrStr[p])));
//给"密码"输入框发送消息,传递密码
SendMessage(hdPwd,WM_SETTEXT,255,Integer(PChar(arrStr[p+1])));
//给"连接"按钮发送点击消息
SendMessage(hdCon,WM_LBUTTONDOWN,0,0);
SendMessage(hdCon,WM_LBUTTONUP,0,0);
end;
Form1.Close;
end;
///////////////////////////////////////////////<br>截图: