找回密码
 加入
搜索
查看: 24348|回复: 36

[网络通信] ControlClick象这样用,点击中了却好象没点击一样,为什么?

  [复制链接]
发表于 2015-1-27 11:55:11 | 显示全部楼层 |阅读模式
悬赏50金钱已解决
本帖最后由 东风烈烈 于 2015-2-3 16:20 编辑

问题解决了,正确的如下(主题在后面加了(已解决)却不显示,不知怎么弄):

                WinActivate("国内期货")
                ;Sleep(1000)
                WinWaitActive("国内期货")
                    If $LKBSA = "{F1}" Then
                                Select
                               Case $BSVOL2 > 1
                                        For $I = 0 To $BSVOL2 - 1
                                               $hwnd = ControlGetHandle("国内期货", "","[CLASS:Button;INSTANCE:2]")

                                              $pos = ControlGetPos("国内期货","","[CLASS:Button;INSTANCE:2]")

                                              $X = String(Hex(Int($pos[2]/2), 4))

                                             $Y = String(Hex(Int($pos[3]/2), 4))

                                             $lParm = "0x" & $Y & $X

                                           _WinAPI_PostMessage($hwnd, 0x200, 0x0, $lParm)

                                          _WinAPI_PostMessage($hwnd, 0x201, 0x1, $lParm)

                                           _WinAPI_PostMessage($hwnd, 0x202, 0x0, $lParm)
                                              ;  ControlFocus("国内期货","","Button2")
                                           ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                        ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:2]")
                                                        ;_GUICtrlButton_Click($handle)
                                            Sleep(200)
                                        Next        
                           Case  $BSVOL2 = 1
                                         $hwnd = ControlGetHandle("国内期货", "","[CLASS:Button;INSTANCE:2]")

                                              $pos = ControlGetPos("国内期货","","[CLASS:Button;INSTANCE:2]")

                                              $X = String(Hex(Int($pos[2]/2), 4))

                                             $Y = String(Hex(Int($pos[3]/2), 4))

                                             $lParm = "0x" & $Y & $X

                                           _WinAPI_PostMessage($hwnd, 0x200, 0x0, $lParm)

                                          _WinAPI_PostMessage($hwnd, 0x201, 0x1, $lParm)

                                           _WinAPI_PostMessage($hwnd, 0x202, 0x0, $lParm)
                                              ;  ControlFocus("国内期货","","Button2")
                                           ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:2]")
                                                ;_GUICtrlButton_Click($handle)
                                        Sleep(200)
                        EndSelect
                  EndIf

上面为正确能执行的源码!原来不能执行是因为要把鼠标放在上面(这个现在我还是不明白)。下面的为不能执行的原来代码。再次谢谢帮忙解决问题的朋友。

代码如下,请高手指点一下,很急。先谢谢了!!!!
                        If $LKBSA = "{F3}" Then
                                Select
                               Case $BSVOL2 > 1
                                        For $I = 0 To $BSVOL2 - 1
                                                ControlFocus("国内期货","","Button2")
                                        ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                        ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:3]")
                                                        ;_GUICtrlButton_Click($handle)
                                            Sleep(200)
                                        Next        
                           Case  $BSVOL2 = 1
                                        ControlFocus("国内期货","","Button2")
                                    ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:3]")
                                                ;_GUICtrlButton_Click($handle)
                                        Sleep(200)
                        EndSelect
                    EndIf
                        If $LKBSA = "{F2}"  Then
                                Select
                               Case $BSVOL2 > 1
                                        For $I = 0 To $BSVOL2 - 1
                                                ControlFocus("国内期货","","Button2")
                                        ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                        ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:4]")
                                                        ;_GUICtrlButton_Click($handle)
                                            Sleep(200)
                                        Next        
                           Case  $BSVOL2 = 1
                                        ControlFocus("国内期货","","Button2")
                                    ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:4]")
                                                ;_GUICtrlButton_Click($handle)
                                        Sleep(200)
                        EndSelect
                    EndIf
                        If $LKBSA = "{F4}" Then
                                Select
                               Case $BSVOL2 > 1
                                        For $I = 0 To $BSVOL2 - 1
                                                ControlFocus("国内期货","","Button2")
                                        ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                        ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:4]")
                                                        ;_GUICtrlButton_Click($handle)
                                            Sleep(200)
                                        Next        
                           Case  $BSVOL2 = 1
                                        ControlFocus("国内期货","","Button2")
                                    ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]","left")
                                                ;Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:4]")
                                                ;_GUICtrlButton_Click($handle)
                                        Sleep(200)
                        EndSelect


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

最佳答案

查看完整内容

[au3]WinActivate("国内期货") WinWaitActive("国内期货") If $LKBSA = "{F1}" And $BSVOL2 > 0 Then For $i = 1 To $BSVOL2 _ControlClick("国内期货", "", "[CLASS:Button;INSTANCE:2]") Sleep(200) Next EndIf Func _ControlClick($iTitle, $iText, $iControl) Local $hwnd = ControlGetHandle($iTitle, $iText, $iControl) Local $pos = ControlGetPos($iTitle, $iText, $iControl) Local $lParm = "0x" & String(He ...
发表于 2015-1-27 11:55:12 | 显示全部楼层
WinActivate("国内期货")
WinWaitActive("国内期货")
If $LKBSA = "{F1}" And $BSVOL2 > 0 Then
        For $i = 1 To $BSVOL2
                _ControlClick("国内期货", "", "[CLASS:Button;INSTANCE:2]")
                Sleep(200)
        Next
EndIf

Func _ControlClick($iTitle, $iText, $iControl)
        Local $hwnd = ControlGetHandle($iTitle, $iText, $iControl)
        Local $pos = ControlGetPos($iTitle, $iText, $iControl)
        Local $lParm = "0x" & String(Hex(Int($pos[3] / 2), 4)) & String(Hex(Int($pos[2] / 2), 4))
        _WinAPI_PostMessage($hwnd, 0x200, 0x0, $lParm)
        _WinAPI_PostMessage($hwnd, 0x201, 0x1, $lParm)
        _WinAPI_PostMessage($hwnd, 0x202, 0x0, $lParm)
EndFunc   ;==>_ControlClick

评分

参与人数 1金钱 +30 收起 理由
东风烈烈 + 30 感谢朋友的指教,问题得到解决了。

查看全部评分

 楼主| 发表于 2015-1-27 21:10:35 | 显示全部楼层
请DX现身,程序对象为文华的赢顺WH6,另外这赏的金钱怎么样付给解决问题的朋友呢?
 楼主| 发表于 2015-1-27 22:39:43 | 显示全部楼层
怎样才可以将悬赏金钱加大到100块?
发表于 2015-1-28 09:22:15 | 显示全部楼层
这个股票的貌似都没有那么简单
 楼主| 发表于 2015-1-28 12:22:30 | 显示全部楼层
本帖最后由 东风烈烈 于 2015-1-28 15:07 编辑

是期货,朋友。
WH6实盘通用版的下载:http://db.wenhua.com.cn/rjxz/index.asp
 楼主| 发表于 2015-1-28 21:43:05 | 显示全部楼层
试了下论坛上说的方法,都不行,差这一步卡在哪里,真苦恼啊!

                         Local $handle = ControlGetHandle("国内期货","","[CLASS:Button; INSTANCE:2]")
                        _GUICtrlButton_Click($handle)

不行!
                  $var=WinList()
                  For $i= 1 To $var[0][0]
                      If $var[$i][0]=="国内期货" Then
                         ;MsgBox(0,$var[$i][0],$i,2)
                         WinActivate($var[$i][1])
                         WinWaitActive("国内期货")
                         ControlFocus("国内期货", "", "Button2")
                         ControlClick("国内期货","","[CLASS:Button; INSTANCE:2]","left")  

还是不行,错在哪里?
 楼主| 发表于 2015-1-29 10:20:34 | 显示全部楼层
本帖最后由 东风烈烈 于 2015-1-29 10:22 编辑

WinActivate("瑞达期货")
                  BlockInput(1);屏蔽鼠标与键盘(输入)
                    ControlFocus("瑞达期货", "", "Edit1")
                        ControlClick("瑞达期货", "", "Edit1")
                        ControlSetText("瑞达期货", "", "Edit1", $CODE1)
                    Sleep(50)
                    ControlFocus("瑞达期货", "", "Edit1")
                    Send("{ENTER}")
                    Sleep(1000)
                    If $LKBSA = "{F1}" Then
                                Select
                               Case $BSVOL2 > 1
                                        For $I = 0 To $BSVOL2 - 1
                                                ControlFocus("瑞达期货", "", "Button2")
                                        ;ControlClick("瑞达期货", "", "Button2")
                                                        MouseClick("left",27,12)
                                            Sleep(200)
                                        Next       
                           Case  $BSVOL2 = 1
                                        ControlFocus("瑞达期货", "", "Button2")
                                    ;ControlClick("瑞达期货", "", "Button2")
                                                MouseClick("left",27,12)
                                        Sleep(200)
                        EndSelect
                    EndIf

这个也不成!请懂的指教一下,不胜感激!
另外说一下我用的操作系统是WIN7,不知跟这个有没有关系?
发表于 2015-1-29 22:30:42 | 显示全部楼层
ControlClick("瑞达期货", "", "Button2")你确认这里没出错吗?
发表于 2015-1-29 22:32:03 | 显示全部楼层
你看一下ControlGETText取得的文本是按钮上的文本,和autoit info取得的信息是一样
发表于 2015-1-29 22:36:39 | 显示全部楼层
Sleep(10000)
ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]")
就单单这句去运行试试,在发送点击前把鼠标移到按钮上,等待他去点击。有些软件会在响应里判断鼠标在不在上面。

评分

参与人数 1金钱 +30 收起 理由
东风烈烈 + 30 谢谢

查看全部评分

 楼主| 发表于 2015-1-29 22:58:54 | 显示全部楼层
回复 9# zhouhaijin

这个按钮的文本是行情数据来的,每秒不停在变,所以不可能相同。谢谢!
发表于 2015-1-29 23:03:09 | 显示全部楼层
回复 11# 东风烈烈


    不用相同,就你是能确定是那按钮控件没有错误就行。
发表于 2015-1-29 23:03:42 | 显示全部楼层
发送点击前把鼠标移到按钮上试了没
 楼主| 发表于 2015-1-29 23:04:16 | 显示全部楼层
本帖最后由 东风烈烈 于 2015-1-29 23:11 编辑

回复 10# zhouhaijin

Sleep(10000)
ControlClick("国内期货","","[CLASS:Button;INSTANCE:2]")
就单单这句去运行试试,在发送点击前把鼠标移到按钮上,等待他去点击。有些软件会在响应里判断鼠标在不在上面。

    按你这个方法去做了.
1,鼠标没放在这个按钮上的时候,能看到有一个点击后的虚线框出现,就是没有别的反应。现在的问题就在这里,
直接手动用鼠标去点的话,会马上发出委托。用这语句如果鼠标没放在按钮上,只会出现被点击后的虚线框,没有执行本身
的委托功能。

2,在程序发送点击前把鼠标移动按钮上,等待它去点击,这时就能正常发出委托的命令。
现在问题真的是你说的那样,请问该怎样解决呢?

谢谢!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 03:12 , Processed in 0.094177 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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