(已解决)如何根据坐标获取控件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,怎么实现? 回复 1# yufei8051
大多数的函数的第二个参数是'文本',可以先获取文本,判断是不是所需要的窗口,然后再进行后续的判断
MS:你最近发了好多帖子~~ 回复yufei8051
大多数的函数的第二个参数是'文本',可以先获取文本,判断是不是所需要的窗口,然后再进行 ...
annybaby 发表于 2012-11-9 16:55 http://www.autoitx.com/images/common/back.gif
谢谢你回复,那个id 1032的用法就是跟你学习的。
窗体文本到底是指哪些东西呢?以上面的图为例,像“买入股票”是窗体文本吗?怎么用呢?
比如
ControlGetPos("",
"","TEdit"&$pid )
我把标题文本和最后的控件改成自己的,窗体文本空着,还能找的到部分控件,但是把 买入股票放到 参数第二部分,就什么都找不到了 回复 3# yufei8051
就是你用窗口信息工具可以抓取到的文本,比如说,我打开了两个记事本程序,它们的窗口标题都是
无标题 - 记事本,内容分别为
12345
annybaby
所以只用
无标题 - 记事本
作为窗口标题不能准确识别两个窗口,那在操作窗口时,加入'anny'就可以准确识别出是第二窗口
注意:当用作识别窗口时,用到
'窗口标题'
的地方,都可以用窗口句柄来代替,且更可靠,此时'窗口文本'的内容会被忽略~~ 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 你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧 得出来的似乎也不editX模式... 5楼是最佳答案! 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是否分别指横坐标和纵坐标?水平太菜,不怎么看得懂,如果能麻烦你写上详细的注释就感激不尽了。
现在手机上网,回去后马上试验。有结果再来汇报。
祝各位周末快乐! 你那个软件不好用 就换一个界面清爽一点的吧 同一期货(证券)公司 应有好多版本的吧
oceanwind 发表于 2012-11-9 22:29 http://www.autoitx.com/images/common/back.gif
只有一种 5楼是最佳答案!
风行者 发表于 2012-11-10 04:01 http://www.autoitx.com/images/common/back.gif
好早啊!
周末快乐! 没分了?怎么加分的框打不开了?
手机上网真不容易。 回复 11# yufei8051
返回结果就是控件ID,根据帖子的标题,这个是最符合要求的~~ 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
马上上机试验。 得出来的似乎也不editX模式...
oceanwind 发表于 2012-11-9 22:30 http://www.autoitx.com/images/common/back.gif
试过了,成功取出id1032
谢谢。
不过怎么把id1032转换成如edit1之类的呢?