找回密码
 加入
搜索
楼主: yufei8051

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

 火.. [复制链接]
 楼主| 发表于 2012-11-10 18:10:15 | 显示全部楼层
在这个软件中,因为editx之类的会变化,而id1032之类的虽然不变,但对有有控件却不可操作,才这么费事的。
发表于 2012-11-10 18:47:22 | 显示全部楼层
回复 15# yufei8051


   
 $tmp=ControlFocus('[last]','',$controlid)
MsgBox(0,0,ControlGetFocus('[last]'))


我觉得花那么多时间来提问,自己搜索帮助都可以了

折腾来折腾去~~

评分

参与人数 1金钱 +10 收起 理由
yufei8051 + 10 特别感激,彻底解决

查看全部评分

发表于 2012-11-10 18:50:09 | 显示全部楼层
这也行,高手
 楼主| 发表于 2012-11-10 19:06:10 | 显示全部楼层
本帖最后由 yufei8051 于 2012-11-10 19:18 编辑
回复  yufei8051


   
$tmp=ControlFocus('[last]','',$controlid)
MsgBox(0,0,ControlGetFocus('[last]'))

我觉得花那么多时间来提问,自己搜索帮助都可以了

折腾来折腾去~~
annybaby 发表于 2012-11-10 18:47


实在感谢!!终于迎解决了!!!!!!
其实这两天一直在搜索,没搜到不是吗,也许是搜索不的法吧
非常感谢啊,终于彻底解决了
发表于 2012-11-10 20:02:42 | 显示全部楼层
回复 19# yufei8051


    用A大的函数询捕 搜索 类别名 前面两个就是你需要的
 楼主| 发表于 2012-11-10 20:39:00 | 显示全部楼层
实在感谢!!终于迎解决了!!!!!!
其实这两天一直在搜索,没搜到不是吗,也许是搜索不的法吧
非 ...
yufei8051 发表于 2012-11-10 19:06



    高兴太早了,关键还是id1032之类有重复,所以用前面的程序找的的也不是都可以操作,要是前面程序直接得到类别名就好了。
 楼主| 发表于 2012-11-10 20:40:13 | 显示全部楼层
回复  yufei8051


    用A大的函数询捕 搜索 类别名 前面两个就是你需要的
annybaby 发表于 2012-11-10 20:02



    函数询捕,谢谢提示,我找找
 楼主| 发表于 2012-11-10 20:44:01 | 显示全部楼层
Func _get_ctr_id_by_zb($zb1, $zb2,$tar_Title)
        Local $controlid
        $tPoint = DllStructCreate($tagPoi ...
oceanwind 发表于 2012-11-9 22:27



    请问能否直接得到类别名如editx之类的?id1032之类有重复,还是不行啊
发表于 2012-11-10 22:15:18 | 显示全部楼层
请问能否直接得到类别名如editx之类的?id1032之类有重复,还是不行啊
yufei8051 发表于 2012-11-10 20:44

没用过其它的了
我平常是用前面所贴的循环取得(for i=1 to 300)
发表于 2012-11-10 22:54:14 | 显示全部楼层
最烦这种有TAB页的下单软件
换家期货公司得了..
 楼主| 发表于 2012-11-10 23:02:04 | 显示全部楼层
没用过其它的了
我平常是用前面所贴的循环取得(for i=1 to 300)
oceanwind 发表于 2012-11-10 22:15



    不行啊,for 这种我试了,关键是重复的id太多,光是1032的就有3个,其它也是如此。好几个编辑框的坐标完全相同,用for只能找的最前面的那一个。
 楼主| 发表于 2012-11-10 23:09:47 | 显示全部楼层
最烦这种有TAB页的下单软件
换家期货公司得了..
oceanwind 发表于 2012-11-10 22:54



    谢谢你关注,不行就用鼠标模拟单击指定坐标,再获取焦点处类别名的方法了。
    前面你的程序有把窗口坐标转换成屏幕坐标的函数,可是我没看明白怎么用。
比如窗口坐标分别是:x230,y80,怎么用函数把它们转换成屏幕坐标可以麻烦你指点一下吗?最好详细一些,谢谢了先
 楼主| 发表于 2012-11-12 13:36:41 | 显示全部楼层
全部功能胜利实现!感谢高手的指点!

依据坐标取到控件句柄
;以下代码可以依据坐标取到控件类别名edit
;Local $tar_Title=$wsgpjyxt, $zb1, $zb2
Func _get_ctr_id_by_zb($zb1, $zb2,$tar_Title)
        Local $tPoint = DllStructCreate($tagPoint);创建一个 C/C++ 样式的数据结构供 DllCall 使用
        DllStructSetData($tPoint, 1, $zb1) ;设置数据结构(struct)中部分元素的数据.   
        DllStructSetData($tPoint, 2, $zb2)     
        _WinAPI_ClientToScreen(WinGetHandle($tar_Title), $tpoint);转换客户区窗口指定点的坐标到一个屏幕坐标
        $hWnd = _WinAPI_WindowFromPoint($tPoint);检索包含指定点的窗口句柄  
            ;Local $controlid 
                ;$controlid = _WinAPI_GetDlgCtrlID($hWnd);检索指定控件的标识符
        ;Return $controlid 
            Return  $hWnd
EndFunc
逐次判断各个控件:
;以下部分检测edit框值
Func GetEditd()
        Local $GetEditjs
        For $GetEditjs=1 To 5 Step 1
                Local $js,$Getjg
                $js=$js+1
                $Getjg=100
                Switch $js
                        Case 1
                                ;第1个框
                                $zb1=234
                                $zb2=88
                                _get_ctr_id_by_zb($zb1, $zb2,$tar_Title);调用子程序
                                ControlFocus($tar_Title,"",_get_ctr_id_by_zb($zb1, $zb2,$tar_Title));设置指定控件为当前焦点
                                $GetdmEdit=ControlGetFocus($tar_Title)
                                Sleep($Getjg)
                        Case 2        
                                ;第2个框
                                $zb1=234
                                $zb2=124
                                _get_ctr_id_by_zb($zb1, $zb2,$tar_Title);调用子程序
                                ControlFocus($tar_Title,"",_get_ctr_id_by_zb($zb1, $zb2,$tar_Title));设置指定控件为当前焦点
                                $GetjgEdit=ControlGetFocus($tar_Title)
                                Sleep($Getjg)
                        Case 3        
                                ;第3个框
                                $zb1=234
                                $zb2=160
                                _get_ctr_id_by_zb($zb1, $zb2,$tar_Title);调用子程序
                                ControlFocus($tar_Title,"",_get_ctr_id_by_zb($zb1, $zb2,$tar_Title));设置指定控件为当前焦点
                                $GetslEdit=ControlGetFocus($tar_Title)
                                Sleep($Getjg)
                        Case 4
                                ;股票名称框
                                $zb1=234
                                $zb2=106
                                _get_ctr_id_by_zb($zb1, $zb2,$tar_Title);调用子程序
                                ControlFocus($tar_Title,"",_get_ctr_id_by_zb($zb1, $zb2,$tar_Title));设置指定控件为当前焦点
                                $Getgpmc=ControlGetFocus($tar_Title)
                                Sleep($Getjg)
                        Case 5
                                ;买入(卖出)按钮
                                $zb1=258
                                $zb2=184
                                _get_ctr_id_by_zb($zb1, $zb2,$tar_Title);调用子程序
                                ControlFocus($tar_Title,"",_get_ctr_id_by_zb($zb1, $zb2,$tar_Title));设置指定控件为当前焦点
                                $Getan=ControlGetFocus($tar_Title)
                                Sleep($Getjg)
                EndSwitch                
                ;MsgBox(262149,"测试FOR次数 :"&$js&"  zb1: "&$zb1&"  zb2: "&$zb2,"代码框:" & $GetdmEdit & ".  价格框:" &  $GetjgEdit & ".  数量框:" & $GetslEdit & @CRLF & @CRLF &"名称框:" & $Getgpmc  & ".  按钮:" & $Getan,3)        
        Next
        ;测试 ,看看5个框各是什么东东                        
        ;MsgBox(262149,"测试:","代码框:" & $GetdmEdit & ".  价格框:" &  $GetjgEdit & ".  数量框:" & $GetslEdit & @CRLF & @CRLF &"名称框:" & $Getgpmc  & ".  按钮:" & $Getan,3)
EndFunc                
发表于 2012-11-13 20:09:04 | 显示全部楼层
yufei8051   您好 
$zb1, $zb2,$tar_Title 代表什么? 最好能加入测试显示结果的代码 我们好测试 谢谢!
发表于 2013-4-23 22:14:29 | 显示全部楼层
高手如云啊,收藏一下。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 00:55 , Processed in 0.087553 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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