yufei8051 发表于 2012-11-10 18:10:15

在这个软件中,因为editx之类的会变化,而id1032之类的虽然不变,但对有有控件却不可操作,才这么费事的。

annybaby 发表于 2012-11-10 18:47:22

回复 15# yufei8051


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

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

折腾来折腾去~~

lxwlxwayy 发表于 2012-11-10 18:50:09

这也行,高手

yufei8051 发表于 2012-11-10 19:06:10

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

回复yufei8051


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

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

折腾来折腾去~~
annybaby 发表于 2012-11-10 18:47 http://www.autoitx.com/images/common/back.gif

实在感谢!!终于迎解决了!!!!!!
其实这两天一直在搜索,没搜到不是吗,也许是搜索不的法吧
非常感谢啊,终于彻底解决了

annybaby 发表于 2012-11-10 20:02:42

回复 19# yufei8051


    用A大的函数询捕 搜索 类别名 前面两个就是你需要的

yufei8051 发表于 2012-11-10 20:39:00

实在感谢!!终于迎解决了!!!!!!
其实这两天一直在搜索,没搜到不是吗,也许是搜索不的法吧
非 ...
yufei8051 发表于 2012-11-10 19:06 http://www.autoitx.com/images/common/back.gif


    高兴太早了,关键还是id1032之类有重复,所以用前面的程序找的的也不是都可以操作,要是前面程序直接得到类别名就好了。

yufei8051 发表于 2012-11-10 20:40:13

回复yufei8051


    用A大的函数询捕 搜索 类别名 前面两个就是你需要的
annybaby 发表于 2012-11-10 20:02 http://www.autoitx.com/images/common/back.gif


    函数询捕,谢谢提示,我找找

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


    请问能否直接得到类别名如editx之类的?id1032之类有重复,还是不行啊

oceanwind 发表于 2012-11-10 22:15:18

请问能否直接得到类别名如editx之类的?id1032之类有重复,还是不行啊
yufei8051 发表于 2012-11-10 20:44 http://www.autoitx.com/images/common/back.gif
没用过其它的了
我平常是用前面所贴的循环取得(for i=1 to 300)

oceanwind 发表于 2012-11-10 22:54:14

最烦这种有TAB页的下单软件
换家期货公司得了..

yufei8051 发表于 2012-11-10 23:02:04

没用过其它的了
我平常是用前面所贴的循环取得(for i=1 to 300)
oceanwind 发表于 2012-11-10 22:15 http://www.autoitx.com/images/common/back.gif


    不行啊,for 这种我试了,关键是重复的id太多,光是1032的就有3个,其它也是如此。好几个编辑框的坐标完全相同,用for只能找的最前面的那一个。

yufei8051 发表于 2012-11-10 23:09:47

最烦这种有TAB页的下单软件
换家期货公司得了..
oceanwind 发表于 2012-11-10 22:54 http://www.autoitx.com/images/common/back.gif


    谢谢你关注,不行就用鼠标模拟单击指定坐标,再获取焦点处类别名的方法了。
    前面你的程序有把窗口坐标转换成屏幕坐标的函数,可是我没看明白怎么用。
比如窗口坐标分别是:x230,y80,怎么用函数把它们转换成屏幕坐标可以麻烦你指点一下吗?最好详细一些,谢谢了先

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

jtzxgfy 发表于 2012-11-13 20:09:04

yufei8051   您好 
$zb1, $zb2,$tar_Title 代表什么? 最好能加入测试显示结果的代码 我们好测试 谢谢!

CHEARV 发表于 2013-4-23 22:14:29

高手如云啊,收藏一下。
页: 1 [2] 3
查看完整版本: (已解决)如何根据坐标获取控件id?