speedneeder 发表于 2010-8-16 16:29:15

如何用脚本调用另一个程序,根据该程序某个控件的状态做出反应?[已解决]

本帖最后由 speedneeder 于 2010-8-17 08:45 编辑

如题,用au3编写脚本调用一个已编好的程序,该程序上有一个按钮控件,一开始显示的文本为 play,点击之后显示 stop,play完毕之后又变回play,而每次play的时间不一定,需要用au3的脚本判断该控件上的文本是否变为play。
是否只有用循环不断读取该控件上的文本这样一种方法?这样会不会造成资源极大的浪费?有没有其他方法,比如控件文本发生变化时发送一个消息之类的?(该程序无法修改)

zps26 发表于 2010-8-17 00:08:30

截获第三方程序消息进行处理,au3自身还做不到吧,如果au3能编写dll就好了,顶一下,盼高人解决,共同学习。

tryhi 发表于 2010-8-17 00:24:08

循环判断时间不要太短应该也不怎么占用资源的,你说的那种情况不太可能实现吧

pusofalse 发表于 2010-8-17 01:01:38

本帖最后由 pusofalse 于 2010-8-17 01:39 编辑

Q1: AU3能获取其他程序上的控件句柄吗?
Q2: 根据句柄能读取到控件上的文本信息吗?
Q3: AU3能实现HOOK吗?

A1: 能。
A2: 能。
A3: 能。

我就想问下,3个主要问题, AU3既然都能解决,那为何就实现不了呢??
将按钮上的文字改变时,必须要调用的API函数是SendMessage(发送WM_SETTEXT消息),只要挂钩SendMessage,判断一下消息接收者和消息值不就行了吗?
或者用SetWindowLong的-4号功能将控件的消息接收地址改变一下,改成自己定义的函数,在自定义函数中截取WM_SETTEXT消息,截取到的同时并用SendMessage通知自己的程序。

Q4: AU3能创建文件吗?
Q5: AU3能写二进制文件吗?

A4: 能。
A5: 能。

既然AU3能创建文件,也能写入二进制数据,那AU3为何就编写不了DLL呢??

郁闷。 - -|||

zps26 发表于 2010-8-17 08:27:31

感谢P大提供思路和详细的解决办法,这个问题困扰很久了。

speedneeder 发表于 2010-8-17 08:46:14

感谢高人解答

pusofalse 发表于 2010-8-17 19:12:18

回复 5# zps26


    就冲你不继续发问,不索要现成代码,而是选择自己独立解决,给你加分。独立思考的过程总是快乐的。
页: [1]
查看完整版本: 如何用脚本调用另一个程序,根据该程序某个控件的状态做出反应?[已解决]