前些公司的产品需要做一个自动登录的功能,就像外挂一样,把所有的心得写出来,所有的自动登录的软件的原理基本差不多.希望能起到抛砖引玉的作用.
下面就是要登录的对话框
为了避免公司版本,所以在此去除了公司的信息及LOGO,上面就是一个用户名和密码对话框,点击确定,登录
这个对话框是为C++开发的. 我们的自动登录工具是用DELPHI开发的
下面是我们自动登录的软件的对话框

现在简单介绍下主界面上的各功能的意思:
----------------------------------------文件框----------------------------------------
Login User
自动登录软件的用户名
Login Password
自动登录软件的密码
其他文本框内容跟自动登录无关,不作介绍
----------------------------------------按扭----------------------------------------
Start:启动要登录的主程序(由于主程序是以服务形式存在的,实际上就是启动服务)
Stop:退出已经登录的主程序(停止服务)
思路:
打开主程序,找到用户和密码的TEXT的句柄,输入值,再点击确定按扭,就这么简单
开始动手:
1.首先我们要找到登录窗体的句柄,在DELPHI中这是很简单的,我们可以用获取主窗口标题的方法得到
var
hwndLogin: integer;
hwndLogin := findWindow(nil, 'Welocme Login'); //得到登录窗体的句柄
if hwndLogin > 0 then
begin
EnumChildWindows(hwndLogin, @EnumChildProc, 0); //枚举窗体中的控件
//Wait the Mian Form.
end
else
begin
showmessage('can not find login window,please confirm');
end;
@EnumChildProc 是一个方法
function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
WndClassName: array[0..254] of Char;
WndCaption: array[0..254] of Char;
Buf: array[0..254] of Char;
begin
GetClassName(hwnd, WndClassName, 254);
GetWindowText(hwnd, WndCaption, 254);
//此类名可以用Microsoft Visual Studio 6.0 ToolsSpy++工具来获得
//注意在这里文本框的类名是"Edit", 而不是"TEXT"
if trim(string(WndClassName)) = 'Edit' then
begin
if times = 1 then
begin
times := 2;
strPcopy(Buf, username);
//这里就是把用户用sendmessage输入用户名文本框
SendMessage(hwnd, WM_SETTEXT, 254, Integer(@Buf));
end
else
begin
strPcopy(Buf, password);
//这里就是把用户用sendmessage输入密码文本框
SendMessage(hwnd, WM_SETTEXT, 254, Integer(@Buf));
end;
end;
//找到按扭点击OK,进入
if trim(string(WndCaption)) = '&OK' then
begin
SendMessage(hwnd, BM_CLICK, 0, 0);
end;
Result := True;
end;
本文介绍了如何利用外挂技术实现程序自动登录功能。在Delphi环境下,通过查找目标C++开发的登录对话框的句柄,输入用户名和密码,然后模拟点击确定按钮,从而达到自动登录的目的。文章提供了启动和停止主程序的简单操作说明。
8761

被折叠的 条评论
为什么被折叠?



