如何在后台,对外部程序界面的某个区域进行鼠标点击!!(300)

  • 主题发起人 主题发起人 xiangxingzi
  • 开始时间 开始时间
X

xiangxingzi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序中,后台运行中,鼠标点击其他的程序上的某个区域(不一定是Button区域);测试了扫雷程序的就可以(因为上面都是Button),非Button区域就不可以,比如计算器程序(calc.exe),(扫雷的非Button区域点击也是无效)。是不是sendmessage的参数设置需要更改??请问哪位高手能解决这个问题,不胜感激!!var Wnd: HWND;begin Wnd := FindWindow(nil,'扫雷'); //找到Delphi IDE 的 handle if Wnd <> 0 then begin SetForegroundWindow(Wnd); SendMessage(Wnd, WM_LBUTTONDOWN,0, MakeLParam(100,200)); SendMessage(Wnd, WM_LBUTTONUP, 0, MakeLParam(100,200)); end else ShowMessage('window not found');end;解决了,分可以追加!!!!
 
给你提一个思路:先确定是什么控件,然后发送针对这一控件的消息,比如对ComboBox发送CB_SHOWDROPDOWN 消息就可以使它自动下拉。
 
SendMessage(findwindow('扫雷','扫雷'), WM_LBUTTONDOWN, 0, MakeLParam(52, 107)); //鼠标按下 sendMessage(findwindow('扫雷','扫雷'), WM_LBUTTONUP, 0, MakeLParam(52, 107)); // 鼠标抬起打开扫雷游戏后,测试这2句代码,不行的话你找我。 亲测。我都说过坐标必须用ScreenToClient转换一下。
 
不好意思,可能我举的计算器的例子有点问题,我要点的外部程序的区域肯定不是button; 比如,一个外部程序里调用的是个flash文件,内部某个地方我需要点击~(根本没可能得到控件句柄),我能否得到外部程序的内部某个区域对应的坐标位置,只执行一个鼠标按下的操作,就可以完成呢?就是 mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0, 0 ); mouse_event(MOUSEEVENTF_LEFTUP,x,y,0, 0 ); 这样的执行效果。但是希望在不影响别的程序的情况下,后台操作~!! 先谢谢大家了!!麻烦getmoney,szhcracker二位了,分我不会吝惜的,放心!!http://www.delphibbs.com/delphibbs/dispq.asp?lid=3987891 这里的分一并给出!!
 
你用我的代码枚举一下你那个外部程序,看看都有些什么,这样也许会清除一点儿。
 
TO : szhcracker 非常感谢你耐心的回答! 我需要操作的外部程序不只一个,界面上的控件也不尽相同,不想每次都枚举在找到对应的控件,对应的方法。 我意思是能不能有统一方法处理: 指定外部程序坐标位置(不管位置处具体是什么东西),进行后台鼠标点击!不知道这样的想法有没有可行性!
 
既然有几个外部程序,你能保证它们运行时的界面(如果有)不会互相覆盖吗?如果B程序运行后把正在运行的A程序挡住了,你用指定坐标位置的方法就不一定管用,除非你先把A程序设置为当前程序后再处理,但这样还是要找到A程序的句柄后再操作的。
 
To: szhcracker, 你有没有什么联系方式呢? 这样一天一句的太费劲了,白天我上不了大富翁~~ 这是我的邮箱 yydhw@qq.com 我们可以交换个在线的联系方式沟通一下吗,非常感谢!!
 
FLASH 跟 IE都办不到~ 得不到句柄。 亲测。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部