实际上是如何控制一个程序窗口
procedureTForm1.Button1Click(Sender:TObject);
var
h1,h:hwnd;
r:trect;
begin
h1:=shellexecute(handle,'open','g:\oicq\oicq.exe','','',sw_show);
repeat
h:=findwindow(nil,'OICQ用户登录');
sleep(20);
untilh<>0;
sendmessage(h1,wm_paint,0,0);
GetWindowRect(h,r);
SetForegroundWindow(h);
setcursorpos(r.Left+210,r.Top+145);
Mouse_Event(MOUSEEVENTF_LEFTDOWN,r.Left+210,r.Top+145,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,r.Left+210,r.Top+145,0,0);
end;
至于密码的问题,必须使用EnumChildWindow(),回调函数代码如下:
先判断哪个是否是一个密码框。
functionCallback(h:hwnd;param:Lparam):boolean;stdcall;
var
buf:array[0..255]ofchar;
begin
result:=true;
GetClassName(h,@buf,255);
ifstrpas(buf)='Edit'then
begin
Enablewindow(h,true);
sendmessage(h,wm_settext,255,integer(pchar('Password')));
// result:=false;
end;
end;
procedureTForm1.Button1Click(Sender:TObject);
var
h1,h:hwnd;
r:trect;
begin
h1:=shellexecute(handle,'open','g:\oicq\oicq.exe','','',sw_show);
repeat
h:=findwindow(nil,'OICQ用户登录');
sleep(50);
untilh<>0;
sendmessage(h1,wm_paint,0,0);
GetWindowRect(h,r);
SetForegroundWindow(h);
setcursorpos(r.Left+210,r.Top+145);
Mouse_Event(MOUSEEVENTF_LEFTDOWN,r.Left+210,r.Top+145,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,r.Left+210,r.Top+145,0,0);
sleep(1000);
h:=Findwindow(nil,'OICQ注册向导');
EnumChildWindows(h,@CallBack,0);
caption:=SysErrorMessage(getlasterror);
end;