tkl1 发表于 2010-6-4 22:38:01

如何选择按钮进行点击?

如果一个窗口,不定时的弹出,有时候有两个按钮,“下一条”和“确定”,有时候只有一个“确定”按钮。如果有两个按钮“下一条”和“确定”,点击“下一条”按钮;如果只有一个“确定”按钮,点击“确定”按钮,如何实现?窗口标题都一样,弹出的位置不同, 谢谢!

acbs 发表于 2010-6-5 10:18:59

如果有快捷键就好办多了。

lynfr8 发表于 2010-6-5 13:51:21

While 1
Sleep(100)
If WinExists("标题", "文本") Then
        If ControlClick ( "标题", "文本", "下一条控件ID") = 0 Then
                ControlClick ( "标题", "文本", "确定控件ID")
        Else
        EndIf
EndIf
WEnd

Hen5ei 发表于 2010-6-5 14:46:47

来围观的 ....

tkl1 发表于 2010-6-5 14:56:00

问题是没有控件ID   检测不出来

lynfr8 发表于 2010-6-5 15:10:59

问题是没有控件ID   检测不出来
tkl1 发表于 2010-6-5 14:56 http://www.autoitx.com/images/common/back.gif


    那就获取窗口大小和控件出现的x,y轴,然后用相对位置来模拟点击

tkl1 发表于 2010-6-5 19:33:10

不能随便点因为有判断条件!

netegg 发表于 2010-6-6 02:34:18

_WinAPI_EnumChildWindows枚举控件句柄通过句柄返回文本

tkl1 发表于 2010-6-6 10:58:46

本帖最后由 tkl1 于 2010-6-6 13:43 编辑

非常感谢,能够再详细点吗,我找说明里面没有解释介绍。最好能帮我写个大概的出来,我好理解,呵呵!\

我百度了一下,说是调用外部程序,但如何调用,还不清楚,烦请教!

lynfr8 发表于 2010-6-6 17:13:35

While 1
If Random() < 0.5 Then
$Msg = MsgBox(0, "窗口标题", "有1个按钮")
Else
$Msg = MsgBox(1, "窗口标题", "有2个按钮")
Endif
If $Msg = 1 Then ToolTip("自动点击了确定", 0, 0)
If $Msg = 2 Then ToolTip("自动点击了取消,相当于点击了“下一条”《《-。-》》", 0, 0)
Sleep(2000)
WEnd

#Include <Array.au3>
#Include <WinAPIEx.au3>
#include <GuiButton.au3>
While 1
Sleep(2000)
$handle = WinGetHandle("窗口标题","")
$Data = _WinAPI_EnumChildWindows($handle)
If IsArray($Data) Then
; _ArrayDisplay($Data, '_WinAPI_EnumChildWindows');11行的“button”从此数组获取,楼主的具体环境或许不一样,自行思考修改即可
For $i = 0 To $Data
If $Data[$i]='button' And $Data[$i+1]='button' Then
_GUICtrlButton_Click ($Data[$i+1]);如果有两个按钮控件就点击第二个(即“取消”按钮)
      Else
If $Data[$i]='button' Then _GUICtrlButton_Click ($Data[$i])
      EndIf
Next
EndIf
WEnd

将以上两段代码同时运行,看看效果是不是楼主想要的?
PS:没有楼主具体软件环境,此2脚本只是解决思路,并非解决楼主问题的最终代码,仅供借鉴!

tkl1 发表于 2010-6-7 10:55:05

这是下一条的控件信息


这是确定的控件信息   因为我点了下一条以后还要进行一系列的鼠标键盘操作,然后点确定结束操作。请问如何写?谢谢大侠们!

tkl1 发表于 2010-6-7 11:25:51

While 1

IfWinExists("成交提示","")   Then
WinGetText("成交提示","")   ;检测到成交提示窗口
$text1 = WinGetText("成交提示","");获得"成交提示"文本
;$text= StringReplace($text1,"确定","")    ;以上为替换弹出信使服务的字符串内容为中文
ClipPut($text1)

;MsgBox(0, "获得的文本:", $text)
Sleep(2000)
send("!.");打开2008版飞信
Sleep(1000)
WinActive("Fetion 2008 ","")
Sleep(2000)
send("!A");打开飞信菜单
Sleep(1000)
Send("+{TAB 8}")
Sleep(1000)
send("{ENTER}")

Sleep(1000)
Send("+{TAB 5}")
Sleep(2000)
send("{ENTER}")
Sleep(2000)
;ControlClick("群发短信","", "WindowsForms10.EDIT.app.0.297b0651", "left", 1, 225, 50) ;激活短信文字输入窗口
;ControlSetText("群发短信","", "WindowsForms10.EDIT.app.0.297b0651", $text)   ;填写短信内容
send("^v")
Sleep(2000)
send("{ENTER}") ;按回车发送
Sleep(2000)
WinActivate("成交提示","")
Sleep(2000)
$kejian=ControlCommand ( "成交提示", "", 2084, "IsVisible" )


      If$kejian=1Then
                        ControlClick ( "成交提示", "", 2084)
Sleep(2000)                       
WinGetText("成交提示","")   ;检测到成交提示窗口
$text1 = WinGetText("成交提示","");获得"成交提示"文本
;$text= StringReplace($text1,"确定","")    ;以上为替换弹出信使服务的字符串内容为中文
ClipPut($text1)

;MsgBox(0, "获得的文本:", $text)
Sleep(2000)
send("!.");打开2008版飞信
Sleep(1000)
WinActive("Fetion 2008 ","")
Sleep(2000)
send("!A");打开飞信菜单
Sleep(1000)
Send("+{TAB 8}")
Sleep(1000)
send("{ENTER}")

Sleep(1000)
Send("+{TAB 5}")
Sleep(2000)
send("{ENTER}")
Sleep(2000)
;ControlClick("群发短信","", "WindowsForms10.EDIT.app.0.297b0651", "left", 1, 225, 50) ;激活短信文字输入窗口
;ControlSetText("群发短信","", "WindowsForms10.EDIT.app.0.297b0651", $text)   ;填写短信内容
send("^v")
Sleep(2000)
send("{ENTER}") ;按回车发送
Sleep(2000)
WinActivate("成交提示","")
Sleep(2000)
ControlClick ( "成交提示", "", 2084)
               
Else
                ControlClick ( "成交提示", "", 2088)

      

      EndIf



Endif
Wend    ;循环检测
这是我写的,循环有个问题。请高手修改一下。我希望每一条用飞信给我手机发短信,发完点确定退出。

Joo 发表于 2010-6-7 12:30:47

mark 围观···

qq54222717 发表于 2010-6-7 23:27:48

让大牛来搞吧。。

lynfr8 发表于 2010-6-8 00:12:55

本帖最后由 lynfr8 于 2010-6-8 00:14 编辑

While 1
If WinExists("成交提示", "") Then
get()
If ControlCommand("成交提示", "", 2084, "IsVisible") = 1 Then
ControlClick("成交提示", "", 2084)
Else
ControlClick("成交提示", "", 2088)
EndIf
EndIf
WEnd

Func get()
ClipPut(StringReplace(WinGetText("成交提示", ""), "确定", ""))
Send("!.") ;打开2008版飞信
WinWaitActive("Fetion 2008 ", "")
Send("!A") ;打开飞信菜单
Sleep(1000)
Send("+{TAB 8}")
Sleep(1000)
Send("{ENTER}")
Sleep(1000)
Send("+{TAB 5}")
Sleep(2000)
Send("{ENTER}")
Sleep(2000)
Send("^v")
Sleep(2000)
Send("{ENTER}") ;按回车发送
Sleep(2000)
WinActivate("成交提示", "")
Sleep(2000)
EndFunc ;==>get

如此?
没有实际环境,也不知道是否误读楼主思路
仅供参考
页: [1] 2
查看完整版本: 如何选择按钮进行点击?