yufei8051 发表于 2012-11-9 16:45:15

(已解决)如何根据坐标获取控件id?

本帖最后由 yufei8051 于 2012-11-10 19:16 编辑

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


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

annybaby 发表于 2012-11-9 16:55:19

回复 1# yufei8051

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

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

yufei8051 发表于 2012-11-9 20:45:47

回复yufei8051

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


    谢谢你回复,那个id 1032的用法就是跟你学习的。
窗体文本到底是指哪些东西呢?以上面的图为例,像“买入股票”是窗体文本吗?怎么用呢?
比如
ControlGetPos("",
"","TEdit"&$pid )
我把标题文本和最后的控件改成自己的,窗体文本空着,还能找的到部分控件,但是把 买入股票放到 参数第二部分,就什么都找不到了

annybaby 发表于 2012-11-9 22:26:06

回复 3# yufei8051

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

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

oceanwind 发表于 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

oceanwind 发表于 2012-11-9 22:29:27

你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧

oceanwind 发表于 2012-11-9 22:30:30

得出来的似乎也不editX模式...

风行者 发表于 2012-11-10 04:01:42

5楼是最佳答案!

yufei8051 发表于 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 http://www.autoitx.com/images/common/back.gif


    非常感谢你的回复!
请教$zb1.$zb2是否分别指横坐标和纵坐标?水平太菜,不怎么看得懂,如果能麻烦你写上详细的注释就感激不尽了。
现在手机上网,回去后马上试验。有结果再来汇报。
祝各位周末快乐!

yufei8051 发表于 2012-11-10 11:59:47

你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧
oceanwind 发表于 2012-11-9 22:29 http://www.autoitx.com/images/common/back.gif


    只有一种

yufei8051 发表于 2012-11-10 12:01:49

5楼是最佳答案!
风行者 发表于 2012-11-10 04:01 http://www.autoitx.com/images/common/back.gif


    好早啊!
周末快乐!

yufei8051 发表于 2012-11-10 12:02:46

没分了?怎么加分的框打不开了?
手机上网真不容易。

annybaby 发表于 2012-11-10 12:47:19

回复 11# yufei8051

返回结果就是控件ID,根据帖子的标题,这个是最符合要求的~~

yufei8051 发表于 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
马上上机试验。

yufei8051 发表于 2012-11-10 18:07:19

得出来的似乎也不editX模式...
oceanwind 发表于 2012-11-9 22:30 http://www.autoitx.com/images/common/back.gif


    试过了,成功取出id1032
谢谢。
不过怎么把id1032转换成如edit1之类的呢?
页: [1] 2 3
查看完整版本: (已解决)如何根据坐标获取控件id?