找回密码
 加入
搜索
楼主: 6vvvvvv

ControlClick有时能点中,有时点不中,是何原因?

  [复制链接]
发表于 2010-4-13 06:23:36 | 显示全部楼层
本帖最后由 lainline 于 2010-4-13 06:31 编辑

run ("d:\wb86-98.EXE")
$hwin=WinWait("微软拼音输入法(2.0)","请仔细阅读",5)
WinActivate ($hwin)
ControlClick($hwin,"","[classnn:Button2]")
;
$hwin=winwait("中文输入法组件安装程序","请从选项列表",5)
WinActivate ($hwin)

ControlFocus ($hwin,"",'ListBox1')
Send();模拟键盘操作
Send()
;。。。
;下面照上面改,没程序没测试,给个思路,点不上可能是坐标参考点不对
winwaitactive("中文输入法组件安装程序","请从选项列表")
ControlClick("中文输入法组件安装程序","请从选项列表","[class:Button;INSTANCE:1]")
winwaitactive("王码五笔型输入法","请仔细阅读")
ControlClick("王码五笔型输入法","请仔细阅读","[class:Button;INSTANCE:1]")
controlclick("中文输入法组件安装程序","请单击","[class:Button;INSTANCE:1]")
发表于 2010-4-13 07:02:16 | 显示全部楼层
不好意思,没注意挖坟了
发表于 2010-4-13 16:50:19 | 显示全部楼层
"[class:Button;INSTANCE:2]"?太夸张了,直接BUTTON2不就好了

根据CHM上的说法,有时要激活窗口才能点中
发表于 2010-4-13 19:09:46 | 显示全部楼层
我也尝试过在ControlClick前加上ControlFocus,并且在两次ControlClick中间延时一秒,还是有时候会有点击不到的情况。太不可靠了。增加延时又会降低效率。
发表于 2010-5-6 13:15:38 | 显示全部楼层
本帖最后由 xiehuahere 于 2010-5-6 13:18 编辑

通过可靠性试验,发现还是使用自定义函数 _GUICtrlButton_Click($hWnd) 通过控件句柄来操作最可靠。

试验中,ControlClick()根据控件ID来操作,ControlClick前使用WinActivate()确保窗口处于激活状态,并且使用ControlFocus()确保焦点正确处于控件上。发现一奇怪现象,LCD与CRT显示器上的可靠性竟然也相差很多,LCD显示器上点击失败的几率小些(500次中有3~5次),CRT显示器上5次中就可能有3次没点击成功。

绝望下把目光转向自定义函数,发现_GUICtrlButton_Click()还是非常好用的,至少CRT显示器上的可靠性大大提高,暂未发现点击失败的情况。想来既然有ControlClick(),别人为什么要自定义一个函数呢,自然是有其存在的价值。使用前先通过ControlGetHandle()获取控件句柄(这里我其实还是通过控件ID来获取句柄的,但可靠性真的不一样)。

结论:用句柄操作控件是最可靠的方法。

评分

参与人数 2金钱 +37 贡献 +1 收起 理由
lynfr8 + 22 + 1 很棒的见解
afan + 15

查看全部评分

发表于 2010-5-6 17:40:31 | 显示全部楼层
回复 22# xiehuahere
具体使用方法可以共享吗?
发表于 2010-5-7 17:26:17 | 显示全部楼层
经测试,有效。感谢22楼的朋友。。。
发表于 2010-5-7 21:04:21 | 显示全部楼层
ID不灵活,建议用别的
发表于 2010-5-8 01:18:23 | 显示全部楼层
试一下,下面的。
用不着WinWaitActive,WinWaitActive在有其它操作的时候很可能点不到.

run ("d:\wb86-98.EXE")
winwait("微软拼音输入法(2.0)","请仔细阅读")
ControlClick("微软拼音输入法(2.0)","请仔细阅读","[class:Button;INSTANCE:2]")
winwait("中文输入法组件安装程序","请从选项列表")
ControlClick("中文输入法组件安装程序","请从选项列表",'ListBox1',"left",1,10,25) ;就是这里
winwait("中文输入法组件安装程序","请从选项列表")
ControlClick("中文输入法组件安装程序","请从选项列表","[class:Button;INSTANCE:1]")
winwait("王码五笔型输入法","请仔细阅读")
ControlClick("王码五笔型输入法","请仔细阅读","[class:Button;INSTANCE:1]")
controlclick("中文输入法组件安装程序","请单击","[class:Button;INSTANCE:1]")
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-22 07:27 , Processed in 0.066319 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表