如何向另一进程的某一对象发送鼠标单击消息?(100分)

  • 主题发起人 主题发起人 lxlzq
  • 开始时间 开始时间
L

lxlzq

Unregistered / Unconfirmed
GUEST, unregistred user!
首先已经获取了另一进程的某个对象,比如tbutton的handle<br>如何用sendmessage把鼠标单击消息发送给它?
 
学习 &nbsp;学习 .. ...
 
sendMessage(Handle,WM_LBUTTONDOWN ,0,0);<br>&nbsp;sendMessage(Handle,WM_LBUTTONUP ,0,0);<br>
 
&nbsp; &nbsp; &nbsp;聊天记录 :<br>(2004-02-18 13:47:03) &nbsp; &nbsp;刘麻子<br>找到按钮 &nbsp;发单击消息给他<br>var<br>&nbsp;s,L:integer;<br>begin<br>&nbsp; s:=findwindow(0,pchar('错误'));//找窗口<br>&nbsp; L:=findwindowex(s,0,pchar('Button'),pchar('否(&amp;N)')); &nbsp;//在主窗体上找按钮<br>&nbsp; //if s=0 then showmessage('没找到');<br>&nbsp;// if l=0 then showmessage('没找到');<br>&nbsp; SendMessage(l,WM_LBUTTONDOWN,0,0); &nbsp;//鼠标左键按下<br>&nbsp; SendMessage(l,WM_LBUTTONUP,0,0); &nbsp; &nbsp;//鼠标左键抬起<br>&nbsp; SendMessage(l,WM_LBUTTONDOWN,0,0); &nbsp;//鼠标左键按下<br>&nbsp; SendMessage(l,WM_LBUTTONUP,0,0); &nbsp; //鼠标左键抬起<br>end;<br>上面代码可以用来暴力破解QQ密码,针对当密码和本地保存不一致时候弹出消息对话框,可以自动选‘否’。<br>可能因为我把这段代码放在我的按钮事件里,导致那错误窗口不是当前窗口,所以要发两次鼠标单击消息。<br><br>看看这里 &nbsp; : &nbsp;http://www.delphibbs.com/delphibbs/dispq.asp?lid=2532183
 
好象不行啊~<br>另一进程的BUTTON似乎无法接收到消息<br>是不是要通过给对放进程发消息,然后再转给他的BUTTON呢
 
no , 得到按钮句柄, 直接发给他。把下面两句代码注释去掉看看有没有找到,<br>&nbsp; //if s=0 then showmessage('没找到');<br>&nbsp;// if l=0 then showmessage('没找到');<br><br>另外find..()里面参数要改成你的那窗体的标题 &amp; 那按钮上的文字 。。。。<br><br>&nbsp; &nbsp;你那什么上面的 按钮,可以说说吗?
 
&nbsp; 先findwindow,得到这个窗体的handle,然后在这个窗体上定为你的那个控件在窗体里的 坐标,把此坐标转为lparam,sendmessage就ok!象下面这样:<br>&nbsp; handle := findwindow(nil, 'xxxxxx'); //找窗口<br>&nbsp; //向窗体的(xoffset,yoffset)处 发送鼠标左键按下的消<br>&nbsp; SendMessage(hmine, WM_LBUTTONDOWN, 0, MAKELPARAM(xOffset,yOffset));<br>&nbsp;很简单,对吧!:)<br>&nbsp;(我是vc程序员,平时看delphi,只看不写,:)) <br>&nbsp; &nbsp;
 
很多情况下,我们需要在程序中实现这样的功能:在自编写的程序里控制另外一软件中的某个按钮被按下。比如,有一天你在聊QQ时觉得烦了,那么就想写程序来帮你按下“发送”按钮,省得你自己一次次动手了。那么,这个想法怎样才能实现呢? <br>其实做法很简单,它只用两条Windows消息就能实现了。(当然,前提是你必须知道那个按钮的handle。我想这个对一般程序员来说简直是小菜一碟)这两条消息分别是:WM_LBUTTONDOWN和WM_LBUTTONUP。下面我给出一个简单的实例说明用法:<br><br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br><br>var<br><br>&nbsp; btnHandle: HWND; &nbsp;//要控制的那个按钮的句柄<br><br>begin<br><br>&nbsp; &nbsp; btnHandle:=strtoint(Edit1.Text ); &nbsp;//为了简单起见就这么设了,你要先写程序得到它<br><br>&nbsp; &nbsp; SendMessage(btnHandle,WM_LBUTTONDOWN,MK_LBUTTON, 0);<br><br>&nbsp; &nbsp; SendMessage(btnHandle,WM_LBUTTONUP,0,0);<br><br>end;<br><br><br><br>整个过程其实就是模拟了一下鼠标左键被按下又松开(注意,光有鼠标左键被按下是不行的)。怎么样?够简单吧!现在就可以把这个功能加进你的程序里面,实现一些有趣的效果了!:)<br><br>楼上的findwindow要用,还要枚举出窗口里的按钮,即得到那个按钮的handle
 
多人接受答案了。
 
后退
顶部