找回密码
 加入
搜索
查看: 5083|回复: 7

[GUI管理] ControlClick 无法处理SysLink类的button[已解决]

  [复制链接]
发表于 2014-3-31 13:24:55 | 显示全部楼层 |阅读模式
本帖最后由 左手l右手r 于 2014-4-3 09:38 编辑

写一个安装包的自动安装脚本,该安装包一个UI上有一个控件,用AutoIt V3窗口信息工具查看其类型是SysLink类型,窗口标题:Advantech DAQNavi - Install Wizard,该控件类型SysLink,高级模式值:CLASS:SysLink; INSTANCE:2, 该控件的ID是1011.

脚本1:
;ControlClick('Advantech DAQNavi - Install Wizard','','[CLASS:SysLink; INSTANCE:2]','left',1)

脚本2:
ControlClick('Advantech DAQNavi - Install Wizard','',1011,'left',1)
用这两种都没法模拟鼠标左键点击一下,请问高手们帮忙看看,为什么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-3-31 16:55:48 | 显示全部楼层
本帖最后由 131738 于 2014-3-31 17:04 编辑

回复 1# 左手l右手r

" 控件的ID是1012 "
截图中的 ID 是 1011 吧.....

第 1 参数试试用句柄...

修改窗口函数执行搜索时的标题匹配模式.
    1 = (默认值)匹配标题的开始部分
    2 = 匹配标题的任意子串
    3 = 完全匹配标题
    4 = 高级模式,详情请查看 窗口标题与文本 (高级)
-1 到 -4 = 根据其它类型匹配不区分大小写的匹配.
 楼主| 发表于 2014-4-1 09:20:44 | 显示全部楼层
回复 2# 131738

嗯嗯,写错了,控件的ID应该是截图中的1011.
已经试了,参数1用窗口的句柄也不行呀,脚本如下所示:
$handle = WinWaitActive("Advantech DAQNavi - Install Wizard","")
$installclick = ControlClick($handle,'',1011,'left',1)
还是跟没点击一样,但是经调试发现,handle的值对着呢,返回的值与用窗口信息工具查看的值一模一样,而且返回的installclick 也是1,说明ControlClick的执行没有问题,但是却没反应。
 楼主| 发表于 2014-4-1 09:52:10 | 显示全部楼层
本帖最后由 左手l右手r 于 2014-4-1 09:54 编辑

回复 2# 131738

我晕呀,问题变向了,原来这个UI是嵌套窗口,一直拿到的这个窗口标题(Advantech DAQNavi - Install Wizard)和handle 是父窗口的,而这个控件是在其子窗口上,子窗口是无边框(且无Title)的那种,嵌在父窗口上,所以,怪不的执行不了,controlclick指定的父窗口的标题或handle,而控件却在子窗口上,OK,这个问题解决了,但是新的问题来了,请问下,我如何能拿到子窗口的handle呢?
发表于 2014-4-1 13:05:07 | 显示全部楼层
回复 4# 左手l右手r
这个可以捕捉父窗

http://www.autoitx.com/forum.php ... 882&fromuid=161
 楼主| 发表于 2014-4-2 13:55:21 | 显示全部楼层
回复 5# 131738

咦,这个是个好东西,谢谢你,特别感谢!
 楼主| 发表于 2014-4-3 09:33:58 | 显示全部楼层
本帖最后由 左手l右手r 于 2014-4-3 09:39 编辑

昨天在问题仔细的查了一遍资料,最后发现我自己把问题想太复杂了,因为习惯用controlclick这个函数,又不太熟悉autoit,老觉得我这个控件因为是syslink类型,所以controlclick函数无法处理这种控件,今天早上突然开窍了,既然我能拿到这个控件的坐标,那何不用MouseClick这个函数呢?直接指定坐标,模拟鼠标点击,就ok了,实在太高兴了。
;程序最前面指定鼠标的坐标模式
Opt("MouseCoordMode",0)
;然后用窗口探测器,得到这个空间的客户区坐标,即相对于激活窗口的坐标
$pos = ControlGetPos($windowhandle, "",1011)
; 测试发现,用这个pos[0]和pos[1]的坐标,鼠标没有变成手形状,应为我的UI上sysylink这个按钮,当鼠标移至上面,会变成手型,因此在移动下
$pos[0] = $pos[0]+5
$pos[1] = $pos[0]+5
;最后用MouseClick,成功跳转到link的指定页面啦
MouseClick("left", $pos[0], $pos[1], 2)
问题解决,谢谢@131738的论坛元老,谢谢你哦~
饶了一圈,发现自己把问题想的太复杂了,希望我这个菜鸟的思路对大家有用,自己改处于摸索的阶段,不过在搜寻syslink的学习中,也学到了不少知识,尤其是网页syslink的制作,可参见页面syslink的制作[url]http://www.autoitscript.com/forum/topic/126958-guisyslink-udf[/url]
另外还有个支持库,可供大家下载参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-4-3 09:51:28 | 显示全部楼层
谢谢楼主分享,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 19:05 , Processed in 0.083091 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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