function GetSpecialButtonHandle(hwnd: HWND; lParam: LPARAM):Boolean; stdcall;
var
cName: array[0..128] of Char;
wName: array[0..128] of Char;
begin
result := true;
GetClassName(hwnd, cName, 128);
if StrPas(cName) = 'Button' then
begin
GetWindowText(hwnd, wName, 128);
if StrPas(wName) = '软键盘'then
begin
FQQVersion := 'V2004Beta';
PInteger(lParam)^ := hwnd;
result := false;
end;
if StrPas(wName) = '注册向导' then
begin
FQQVersion := 'V2003';
PInteger(lParam)^ := hwnd;
result := false;
end;
end;
end;
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): boolean; stdcall;
var
eName: array[0..180] of Char;
begin
Result := true;
if hwnd = 0 then Exit;
GetClassName(hwnd, eName, 32);
If CompareText('#32770', StrPas(eName))<>0 Then Exit;
EnumChildWindows(hwnd, @GetSpecialButtonHandle, Integer(@HSpecialHandle));
if HSpecialHandle <> 0 then
Begin
QQHandle:= hwnd;
Result := False;
End;
end;
begin
QQHandle:= 0;
EnumWindows(@EnumWindowsProc, 0);
Result:= QQHandle;
end;
{-------------------------------------------------------------------------------
说明: 取得QQ窗口的各个编辑框以及登陆按钮的句柄
-------------------------------------------------------------------------------}
procedure GetQQHandle;
Var
eHandle: THandle;
begin
eHandle:= FindQQWindow;
if eHandle<>0 then
begin
HPasswordEdit:= FindWindowEx(eHandle, 0, 'Edit', nil);
HNumberEdit:= FindWindowEx(eHandle, 0, 'Combobox', nil);
HLoginButton:= FindWindowEx(eHandle, 0, 'Button', '登录');
end;
end;
{-------------------------------------------------------------------------------
说明: 启动QQ后,计时器开始检测QQ窗口的存在,
检测到了,发送用户名密码到指定编辑框再模拟点击QQ登陆按钮完成登陆
-------------------------------------------------------------------------------}
procedure TQQLogin.FTimerTimer(Sender: TObject);
var
i: integer;
begin
GetQQHandle;
If (HNumberEdit=0) or (HPasswordEdit=0) or (HLoginButton=0) Then Exit;
if FQQVersion = 'V2004Beta' then
begin
For I:= 1 To Length(FPassword) Do
SendMessage(HPasswordEdit, WM_USER+513, Integer(FPassword[I]), 0);
end
else
begin
For I:= 1 To Length(FPassword) Do
begin
SendMessage(HPasswordEdit, WM_CHAR, Integer(FPassword[I]), 0);
end;
end;