sendmessage实现点击其他程序上的按钮<wbr><wbr></wbr></wbr>
<wbr></wbr>
<wbr></wbr>
下面的代码是用QQ登录来作实验的。
procedure TForm1.Button3Click(Sender: TObject);
var
h,h1:THandle;
begin
<wbr><wbr>h:=findwindow(nil,'QQ用户登录');//h是登录窗口句柄</wbr></wbr>
<wbr><wbr>if h<>0 then</wbr></wbr>
<wbr><wbr>begin</wbr></wbr>
<wbr><wbr>h1:=findwindowex(h,0,nil,'登录');//h1是登录按钮的句柄</wbr></wbr>
<wbr><wbr>edit3.Text:=inttostr(h1);</wbr></wbr>
<wbr><wbr>SENDmessage(h,WM_COMMAND,MAKELONG(GETDLGCTRLID(H1),BN_CLICKED),0);</wbr></wbr>
<wbr><wbr>end</wbr></wbr>
<wbr><wbr>else</wbr></wbr>
<wbr><wbr>showmessage('false');</wbr></wbr>
end;
程序实现的步骤是
首先查找QQ登录窗口的句柄,然后根据这个句柄在查找其窗口内名为“登录”的按钮的句柄。
这个时候就可以通过按钮的句柄对其进行操作。
这里主要在sendmessage的参数
我最早时候用sendmessage(h1,BN_CLICKED,0,0);
结果无效,后来才知道,BN_CLICKED是notification消息~ 必须要有ID……
使用sendmessage(h1,WM_LBUTTONDOWN,0,0);发送鼠标左键点击消息,也是无效不知道什么原因
<wbr></wbr>
========================================自己的代码=================================
procedure TForm1.Button1Click(Sender: TObject);
var
h,h1:THandle;
begin
<wbr><wbr> h:=findwindow(nil,'乘车线路问题');//h是登录窗口句柄<br><wbr><wbr> if h<>0 then<br><wbr><wbr><wbr> begin<br><wbr><wbr><wbr> h1:=findwindowex(h,0,nil,'重新读取数据');//h1是Button1按钮的句柄<br><wbr><wbr><wbr> edit1.Text:=inttostr(h1);<br><wbr><wbr> //SENDmessage(h,WM_COMMAND,MAKELONG(GETDLGCTRLID(H1),BN_CLICKED),0);<br><wbr><wbr><wbr> sendmessage(h1,WM_LBUTTONDOWN,0,0);//down 必须有<br><wbr><wbr><wbr> sendmessage(h1,WM_LBUTTONUP,0,0);<wbr> //up 必须有<br><wbr><wbr> end</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr> else</wbr></wbr>
<wbr><wbr> showmessage('false');</wbr></wbr>
end;
------------------------------------------------------------------
Gameh:=FindWindow(nil,'对对碰角色版' );
<wbr><wbr><wbr><wbr> showmessage(inttostr(Gameh));<br><wbr><wbr><wbr><wbr> //SendMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$0180017A);//按下<br><wbr><wbr><wbr><wbr> //SendMessage(Gameh,Messages.WM_LBUTTONUP, 0, $0180017A);//抬起<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> SendMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$0187018C);//按下<br><wbr><wbr><wbr><wbr> SendMessage(Gameh,Messages.WM_LBUTTONUP, 0, $0187018C);//抬起</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>