找回密码
 加入
搜索
查看: 14666|回复: 26

[AU3基础] 悬赏:高难度挑战 点击按钮不通过ID和类别名 可以实现吗?

 火.. [复制链接]
发表于 2011-8-4 11:11:22 | 显示全部楼层 |阅读模式
悬赏50金钱已解决
问题是这样产生的:
在用AutoIT进行自动化测试时,发现有些按钮(button)的ID会变或者和别的按钮ID重复了,而且这些按钮都是没有text的,唯一有的是tooltip,这样子的话就让我点击这个按钮产生了困难。

类似问题的解决:
之前遇到的问题是有些按钮(button)的ID会变或者和别的按钮ID重复了,但是在P版的帮助下通过controlclick('','','[class:button;text:xxx]')就解决了,但是现在这些button连text都没有。

AutoIt V3 窗口信息工具获得的信息如下:
>>>> 控件 <<<<
类:        Button
接口:        8
类别名:        Button8
名称:       
高级模式(类):[CLASS:Button; INSTANCE:8]
ID:        32000
文本:       
坐标:        94, 129
大小:        50, 50
控件点击坐标:17, 23
样式:        0x54010000
扩展样式:0x00000000
句柄:        0x0009064E

就是说 (类别名:        Button8)是会变的,每次打开这个软件button数是不一样的,所以ID也是不一样的。

挑战的事情就是:如果不用(类别名:        Button8)和ID,如何能准确的点击那些按钮?
枚举?可是这些button都是只有tooltips没有name没有text的啊!

有别的方法吗???

最佳答案

查看完整内容

类会变,ID会变,但式样及座标,大小这些总不会吧? 如果这都变那根本就是不同的窗口了.
发表于 2011-8-4 11:11:23 | 显示全部楼层
类会变,ID会变,但式样及座标,大小这些总不会吧?
如果这都变那根本就是不同的窗口了.

评分

参与人数 1金钱 +10 贡献 +1 收起 理由
jinyue115 + 10 + 1 老大 为什么我不能回复了?麻烦了,谢谢。

查看全部评分

 楼主| 发表于 2011-8-4 11:13:35 | 显示全部楼层
有人可能会说mousemove , mouseclick不就行了?那个软件size不固定,而且我一直都不赞成用坐标的
 楼主| 发表于 2011-8-4 11:15:06 | 显示全部楼层
真是很抱歉了,最近老是来问问题。可是这些问题我想了很久没辙了
发表于 2011-8-4 11:46:10 | 显示全部楼层
hwnd 试过没
发表于 2011-8-4 13:07:34 | 显示全部楼层
Run("calc.exe")
$HWND=WinWaitActive("计算器",'')
If IsHWnd($HWND) Then ControlClick(HWnd($HWND), "", "[CLASS:Button; INSTANCE:10]")
 楼主| 发表于 2011-8-4 13:49:29 | 显示全部楼层
回复 5# 3mile


    If IsHWnd($HWND) Then ControlClick(HWnd($HWND), "", "[CLASS:Button; INSTANCE:10]")

这后面不是有 "[CLASS:Button; INSTANCE:10]"吗?你的意思是说当有计算器窗口出来的情况下,点击button10,可是问题是按钮的ID和类别名是会变的 , 这次是button10 下次就不是的了,唯一可以确定不变的就是tooltips.

谢谢帮忙,看来还是挺麻烦的。我试图用其他方法代替如send回车,但是无法聚焦到那个按钮上。。。
 楼主| 发表于 2011-8-4 13:50:42 | 显示全部楼层
回复 4# wa18239


    具体你是说 怎么用句柄?能麻烦详细说下嘛?谢谢了
发表于 2011-8-4 16:08:22 | 显示全部楼层
本帖最后由 wa18239 于 2011-8-4 16:15 编辑

 
#Include <GuiButton.au3>
Run("calc.exe")
$HWND=WinWait("计算器",'')
$HWND2 = ControlGetHandle("计算器","","[ID:130]")   ;获取数字‘6’键的句柄
If IsHWnd($HWND2) Then _GUICtrlButton_Click($HWND2)
sleep(2000)
WinClose($HWND)
 
发表于 2011-8-4 18:24:58 | 显示全部楼层
可以截个图吗

评分

参与人数 1金钱 +10 收起 理由
jinyue115 + 10 图片已放到14楼 ,谢谢您的帮忙。

查看全部评分

发表于 2011-8-4 22:55:38 | 显示全部楼层
用相对坐标方式进行鼠标点击。
或者用找图方式来找按钮坐标位置。

评分

参与人数 1金钱 +10 收起 理由
jinyue115 + 10 图片已放到14楼 ,谢谢您的帮忙。

查看全部评分

发表于 2011-8-4 23:25:37 | 显示全部楼层
本帖最后由 sdc7 于 2011-8-4 23:27 编辑

其实根据游戏外挂的理论,固定程序的话,完全可以找这个程序,这个按钮的 CALL 然后汇编调用CALL 貌似很爽  呵呵!  虽然有些复杂,但是实现后,后台都可以执行的。你可以搜下论坛几位牛人对游戏CALL的调用寻找和 汇编方面的UDF

评分

参与人数 1金钱 +10 收起 理由
jinyue115 + 10 图片已放到14楼 ,谢谢您的帮忙。

查看全部评分

发表于 2011-8-5 06:51:26 | 显示全部楼层
_winapi_enumchildwindows()
_WinAPI_GetWindowInfo()
位置总不会变的吧

评分

参与人数 1金钱 +10 收起 理由
jinyue115 + 10 图片已放到14楼 ,谢谢您的帮忙。

查看全部评分

发表于 2011-8-5 10:43:18 | 显示全部楼层
遍历button控件,找出符合 部分 参数的按钮,点下去。
比如,所有 大小 是50*50 的,或者 某一种 样式 的按钮。

评分

参与人数 1金钱 +10 收起 理由
jinyue115 + 10 图片已放到14楼 ,谢谢您的帮忙。

查看全部评分

 楼主| 发表于 2011-8-8 10:22:41 | 显示全部楼层
以下是二次编辑:
============================
下图所示为一个拍照/录视频的软件,右边界面有影像效果和一般设置。分别放在两个tab里面,切换tab和点击按钮的顺序不同造成的button ID也就变的不同了
还有more按钮(我已在图中用红色圆圈标出来)出现与否和机器声卡有关,有或者没有more按钮对button ID也是有影响。

我要实现的功能是:自动选择效果和一般设置然后拍照。

So,我的问题是:假如我选择‘mirror image‘ 然后想做自动化拍照,可是这时我却不能肯定那个拍照按钮在不同机器上的ID是什么?而且那个按钮是没有text的。

我之前一直的做法是:把tab里面的效果和一般设置按钮统统点击一遍,也就相当于变相数了一下多少个按钮,然后那个拍照的按钮的button ID也就固定了,可是现在more随机的出现就添加了很多麻烦。

不知道大伙是否有高招?或者能让我换个别的思路也行?如果大家有任何不明白的地方,欢迎提问。谢谢大家了。

本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 20:44 , Processed in 0.090527 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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