找回密码
 加入
搜索
查看: 4500|回复: 6

[系统综合] [已解决]迅雷2011自动安装问题 捕获不到窗口文本

  [复制链接]
发表于 2011-5-18 12:44:21 | 显示全部楼层 |阅读模式
本帖最后由 hetinghtht 于 2011-6-7 10:13 编辑

如题,自动安装中无法捕获到窗口文本,所以使用控件句柄,但安装进度到安装界面不知道如何监控好以及区分这两个页面,区分后是否还要等待进度页面完成,这个等待如何处理,不会是sleep吧?太不可靠了,希望高手能给点建议,最终实现的结果(如下图),还有的话软件刚开始的第二步的2个确定框是否有更好的处理方法?等待界面到完成界面的不同点我的想法是可以获取窗口下是否有控件来判断不同,但是判断后还是需要执行等待,我现在最头疼的就算这个等待怎么去处理,sleep我并不想用。下面的代码我还有部分未完成,以及用我所发图片中这样设置的来设计这个程序,还请教代码16-28行能否做成自定义函数,因为最后面的完成页面需要多个调用。我对自定义函数不是很懂。迅雷版本:Thunder7.1.8.2298,下载地址:http://down.sandai.net/thunder7/Thunder7.1.8.2294.exe

#include <WinAPI.au3>
#include <SendMessage.au3>
;--------------------------------------------------------------;脚本开始
Opt("TrayIconDebug", 1) ;0=无信息, 1=调试信息
Opt("WinTextMatchMode", 2) ;1=完全匹配, 2=快速匹配
Opt("WinTitleMatchMode", 4) ;1=开头, 2=子串, 3=完全, 4=高级
Opt("WinSearchChildren", 1) ;0=不搜索, 1=搜索子窗口
Opt("WinDetectHiddenText", 1) ;0=不检测, 1=检测
;--------------------------------------------------------------;设置脚本参数

$WinTitle_1= '迅雷7安装程序'
$Wintxt_1= '软件许可协议'
$Wintxt_2= 'C:\Program Files\Thunder Network\Thunder'
$Wintxt_3= ''
Local $iX, $iY
$hwnd = WinGetHandle($WinTitle_1);获取窗口句柄
$Hwnd_Button1 = _WinAPI_GetDlgItem($hwnd, 1040) ;启动迅雷7”的按键的句柄
#cs
$Hwnd_Button2 = _WinAPI_GetDlgItem($hwnd, 1041) ;将迅雷看看设为首页”的按键的句柄
$Hwnd_Button3 = _WinAPI_GetDlgItem($hwnd, 1043) ;查看新版本特性”的按键的句柄
$Hwnd_Button4 = _WinAPI_GetDlgItem($hwnd, 1007) ;完成”的按键的句柄
#ce
$tRect = _WinAPI_GetWindowRect($Hwnd_Button1)
$iLeft = DllStructGetData($tRect, "Left") ;屏幕左侧距离
$iTop = DllStructGetData($tRect, "Top") ;屏幕顶部距离
$iRight = DllStructGetData($tRect, "Right") ;屏幕右侧距离
$iButton = DllStructGetData($tRect, "Bottom") ;屏幕底部距离
;$iRight - $iLeft 控件的宽度
;$iButton - $iTop 控件的高度
$iX = $iLeft + ($iRight - $iLeft) / 2 ;取控件的中央点
$iY = $iTop + ($iButton - $iTop) / 2 ;取控件的中央点
Local $ilParam = BitOR($iY * 65536, BitAND($iX, 65535))


;----------------------------------------------------------------;执行程序
$Exe = 'Thunder7.1.8.2298.exe'
If ProcessExists($Exe) Then ProcessClose($Exe)
If Run($Exe) = 0 Then ShellExecute($Exe)

Do
        Sleep(10);
Until WinExists($Wintitle_1)
;WinMove($Wintitle_1, "", -1000, -1000)
;--------------------------------------------------------------;程序启动,显示界面


WinWaitActive($Wintitle_1, $Wintxt_1)
ControlClick($Wintitle_1, $Wintxt_1, "Button1");---------------;点击按钮控件: 接受

WinWaitActive($Wintitle_1, $Wintxt_2)
ControlClick($Wintitle_1, $Wintxt_2, "Button7");---------------;点击按钮控件: 开机启动迅雷7
Sleep(500)
Send("{ENTER}")
ControlClick($Wintitle_1, $Wintxt_2, "Button1");---------------;点击按钮控件: 下一步
Sleep(500)
Send("{ENTER}")

WinWaitActive($WinTitle_1,$Wintxt_3,)

_SendMessage($Hwnd_Button1, 0x0201, $ilParam) ;发送鼠标消息
_SendMessage($Hwnd_Button1, 0x0202, $ilParam)
这是我的代码,希望论坛老大能帮我看看。

本帖子中包含更多资源

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

×
发表于 2011-5-18 14:30:03 | 显示全部楼层
http://www.autoitx.com/thread-24425-1-2.html
论坛里常用软件基本都有自动安装的 你可以搜索下
发表于 2011-5-18 16:06:57 | 显示全部楼层
使用高级模式或者正则。来获取窗口标题
发表于 2011-5-18 21:38:42 | 显示全部楼层
获取下一步的控件句柄
使用IsWindowEnabled或IsWindowVisible来判断状态
true则为第一个窗口,false则为第二个窗口
 楼主| 发表于 2011-5-24 10:50:04 | 显示全部楼层
回复 4# ceoguang
谢谢老大
发表于 2012-6-29 13:37:42 | 显示全部楼层
这个现象确实比较少见,Title找不到,看来楼主已经解决问题了
发表于 2012-7-1 23:13:35 | 显示全部楼层
原来特殊窗口要这么搞,学习了。。。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 07:30 , Processed in 0.174697 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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