找回密码
 加入
搜索
查看: 26804|回复: 35

[AU3基础] (已解决)如何根据坐标获取控件id?

 火.. [复制链接]
发表于 2012-11-9 16:45:15 | 显示全部楼层 |阅读模式
本帖最后由 yufei8051 于 2012-11-10 19:16 编辑

如题。
editx之类的值会变化,id1032之类的有的控件不能用,只能自己根据坐标判断控件id的值,用这个帖子:
http://www.autoitx.com/forum.php ... mp;page=1#pid484631
for $pid =1 to 100
                $pos = ControlGetPos("[CLASS:TFREP_WS_R]", "","TEdit"&$pid )
                                if  $pos[1] == "56" Then ;56为控件的y 坐标  唯一的。。。
                 ControlSetText("[CLASS:TFREP_WS_R]", "","TEdit"&$pid, $h9 )
                                 ExitLoop
                             EndIf
                        Next
的方法不好使,因为有几个控件的坐标相同(但是不在同一界面下)。
我想在切换到相应界面后再根据坐标读取控件id值,怎么完成呢?比如下图:


假如我根据
坐标:230, 88
读取当前 控件id,怎么实现?

本帖子中包含更多资源

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

×
发表于 2012-11-9 16:55:19 | 显示全部楼层
回复 1# yufei8051

大多数的函数的第二个参数是'文本',可以先获取文本,判断是不是所需要的窗口,然后再进行后续的判断

MS:你最近发了好多帖子~~

评分

参与人数 1金钱 +30 收起 理由
yufei8051 + 30 加入窗体文本后还是不行,相同坐标的只能找 ...

查看全部评分

 楼主| 发表于 2012-11-9 20:45:47 | 显示全部楼层
回复  yufei8051

大多数的函数的第二个参数是'文本',可以先获取文本,判断是不是所需要的窗口,然后再进行 ...
annybaby 发表于 2012-11-9 16:55



    谢谢你回复,那个id 1032的用法就是跟你学习的。
窗体文本  到底是指哪些东西呢?以上面的图为例,像“买入股票”是  窗体文本  吗?怎么用呢?
比如
ControlGetPos("[CLASS:TFREP_WS_R]",
"","TEdit"&$pid )
我把标题文本和最后的控件改成自己的,窗体文本  空着,还能找的到部分控件,但是把 买入股票  放到 参数第二部分,就什么都找不到了
发表于 2012-11-9 22:26:06 | 显示全部楼层
回复 3# yufei8051

就是你用窗口信息工具可以抓取到的文本,比如说,我打开了两个记事本程序,它们的窗口标题都是
无标题 - 记事本,内容分别为
12345
annybaby
所以只用
    无标题 - 记事本
作为窗口标题不能准确识别两个窗口,那在操作窗口时,加入'anny'就可以准确识别出是第二窗口

注意:当用作识别窗口时,用到
'窗口标题'
的地方,都可以用窗口句柄来代替,且更可靠,此时'窗口文本'的内容会被忽略~~

评分

参与人数 1金钱 +30 收起 理由
yufei8051 + 30 貌似此路不通,正在想别的方法

查看全部评分

发表于 2012-11-9 22:27:35 | 显示全部楼层
Func _get_ctr_id_by_zb($zb1, $zb2,$tar_Title)
        Local $controlid
        $tPoint = DllStructCreate($tagPoint)
        DllStructSetData($tPoint, 1, $zb1)
    DllStructSetData($tPoint, 2, $zb2)        
        _WinAPI_ClientToScreen(WinGetHandle($tar_Title), $tpoint)
    $hWnd = _WinAPI_WindowFromPoint($tPoint)        
    $controlid = _WinAPI_GetDlgCtrlID($hWnd)
    Return $controlid        
EndFunc

评分

参与人数 1金钱 +10 收起 理由
annybaby + 10 学习了

查看全部评分

发表于 2012-11-9 22:29:27 | 显示全部楼层
你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧
发表于 2012-11-9 22:30:30 | 显示全部楼层
得出来的似乎也不editX模式...
发表于 2012-11-10 04:01:42 | 显示全部楼层
5楼是最佳答案!
 楼主| 发表于 2012-11-10 11:58:34 | 显示全部楼层
Func _get_ctr_id_by_zb($zb1, $zb2,$tar_Title)
        Local $controlid
        $tPoint = DllStructCreate($tagPoi ...
oceanwind 发表于 2012-11-9 22:27



    非常感谢你的回复!
请教$zb1.$zb2是否分别指横坐标和纵坐标?水平太菜,不怎么看得懂,如果能麻烦你写上详细的注释就感激不尽了。
现在手机上网,回去后马上试验。有结果再来汇报。
祝各位周末快乐!
 楼主| 发表于 2012-11-10 11:59:47 | 显示全部楼层
你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧
oceanwind 发表于 2012-11-9 22:29



    只有一种
 楼主| 发表于 2012-11-10 12:01:49 | 显示全部楼层
5楼是最佳答案!
风行者 发表于 2012-11-10 04:01



    好早啊!
周末快乐!
 楼主| 发表于 2012-11-10 12:02:46 | 显示全部楼层
没分了?怎么加分的框打不开了?
手机上网真不容易。
发表于 2012-11-10 12:47:19 | 显示全部楼层
回复 11# yufei8051

返回结果就是控件ID,根据帖子的标题,这个是最符合要求的~~
 楼主| 发表于 2012-11-10 17:10:30 | 显示全部楼层
Func _get_ctr_id_by_zb($zb1, $zb2,$tar_Title)
        Local $controlid
        $tPoint = DllStructCreate($tagPoint)
        DllStructSetData($tPoint, 1, $zb1)
    DllStructSetData($tPoint, 2, $zb2)        
        _WinAPI_ClientToScreen(WinGetHandle($tar_Title), $tpoint)
    $hWnd = _WinAPI_WindowFromPoint($tPoint)        
    $controlid = _WinAPI_GetDlgCtrlID($hWnd)
    Return $controlid        
EndFunc
马上上机试验。
 楼主| 发表于 2012-11-10 18:07:19 | 显示全部楼层
得出来的似乎也不editX模式...
oceanwind 发表于 2012-11-9 22:30



    试过了,成功取出id1032
谢谢。
不过怎么把id1032转换成如edit1之类的呢?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 20:51 , Processed in 0.082829 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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