{-------------------------------------------------------------------------------
过程名: FindUCWindow
说明: 查找系统中UC窗口的句柄
作者: Larry
日期: 2005.03.26
参数: 无
返回值: THandle
-------------------------------------------------------------------------------}
function FindUCWindow: THandle;
function GetSubForm(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) = 'TUCTabSheet' then
begin
GetWindowText(hwnd, wName, 128);
if StrPas(wName) = 'UC号码'then
begin
PInteger(lParam)^ := hwnd;
result := false;
end;
end;
end;
function EnumWindowsFunc(hwnd: HWND; lParam: LPARAM): boolean; stdcall;
var
CName: array[0..128] of Char;
begin
Result := true;
if hwnd = 0 then Exit;
Windows.GetClassName(hwnd, CName, 128);
If StrPas(CName) <> 'TLoginForm' Then Exit;
EnumChildWindows(hwnd, @GetSubForm, Integer(@HSubFormHandle));
if HSubFormHandle <> 0 then
begin
UCHandle:= HSubFormHandle;
Result := False;
end;
end;
begin
UCHandle:= 0;
EnumWindows(@EnumWindowsFunc, 0);
Result:= UCHandle;
end;
{-------------------------------------------------------------------------------
过程名: GetUCHandle
说明: 取得UC窗口的各个编辑框以及登陆按钮的句柄
作者: Larry
日期: 2005.03.26
参数: 无
返回值: 无
-------------------------------------------------------------------------------}
procedure GetWindowHandle;
Var
eHandle,TempHandle: THandle;
begin
eHandle:= FindUCWindow;
if eHandle<>0 then
begin
HPasswordEdit:=Windows.FindWindowEx(eHandle,0,'TUCFlatEdit',nil);
HNumberCombo:=Windows.FindWindowEx(eHandle,0,'TXPComboBox',nil);
TempHandle:=Windows.GetParent(eHandle);
HLoginButton:= Windows.GetNextWindow(TempHandle,GW_HWNDNEXT);
end;
end;
destructor TUCLogin.Destroy;
begin
FTimer.Free;
inherited;
end;
{-------------------------------------------------------------------------------
过程名: TUCLogin.FTimerTimer
说明: 启动UC后,计时器开始检测UC窗口的存在,
检测到了,发送用户名密码到指定编辑框再模拟点击UC登陆按钮完成登陆
作者: Larry
日期: 2005.03.26
参数: Sender: TObject
返回值: 无
-------------------------------------------------------------------------------}
procedure TUCLogin.FTimerTimer(Sender: TObject);
var
i: integer;
begin
GetWindowHandle;
If (HNumberCombo=0) or (HPasswordEdit=0) or (HLoginButton=0) Then Exit;
SendMessage(HNumberCombo, WM_SETTEXT, 0, Integer(FUserId));
For I:= 1 To Length(FPassword) Do
begin
SendMessage(HPasswordEdit, WM_CHAR, Integer(FPassword[I]), 0);
end;
SendMessage(HLoginButton, WM_LBUTTONDOWN, 0, 0);
SendMessage(HLoginButton, WM_LBUTTONUP, 0, 0);
FTimer.Enabled := False;
Free;
end;
procedure TUCLogin.UCLogin;
begin
FTimer.Enabled := True;
end;