找回密码
 加入
搜索
查看: 5252|回复: 12

[AU3基础] [已解决]请论坛前辈帮忙解决一下关于最新版暴风影音安装脚本的问题

  [复制链接]
发表于 2013-1-22 22:56:28 | 显示全部楼层 |阅读模式
本帖最后由 wangzihe 于 2013-1-23 23:43 编辑

我刚刚接触au3,借助别人的脚本,照猫画虎,自己弄了一个暴风影音5.21.0115.1111(目前官方最新版)的au3自动安装脚本,可是有两个小问题不很满意,希望得到论坛前辈的指教。
问题1:这个脚本原来到了“立即体验”按钮出现的时候就会停止,无法进行下面的了。于是我试着在第28行加了Sleep(17000),测试了一下,如果安装进度条在17秒内能跑到头,那么脚本就可以顺利进行到底;如果电脑是老机器运行慢,安装进度条在17秒内不能跑到头,那么脚本同样还是会停止。我想能不能加个什么函数,让它自己判断,当“立即体验”按钮出现的时候,自动点击“立即体验”按钮继续进行下面的脚本呢?
问题2:如果电脑里以前安装过暴风影音,就会出现"暴风影音安装提示"对话框,这样脚本就能顺利的覆盖安装;但如果系统是第一次安装暴风影音,那么这个提示框就不会出现,而是直接出现'安装 暴风影音5 正式版' , 此时脚本也就卡在这里了。能不能改一下代码,让它自动判断,如果出现第一个窗口,就进行第一个窗口的操作,如果第一个窗口不出现,就直接跳到第二个窗口操作呢?
感谢坛友们的帮助,代码如下:
$file='暴风影音5.21.0115.1111.exe'
If Not FileExists($file) Then Exit
Run($file)
If WinWait("暴风影音安装提示") Then ;如果已经安装过暴风影音,确认覆盖安装
        WinActivate("暴风影音安装提示")
        WinWaitActive("暴风影音安装提示")
        ControlClick("暴风影音安装提示", "", "Button1")
EndIf
$Hwnd=WinWait('安装 暴风影音5 正式版')
;等待欢迎界面控件可见
Do 
        Sleep(300)
Until ControlCommand($Hwnd,'','SkinWindow1','IsVisible')
;点击下一步
ControlClick($Hwnd,'','SkinWindow1','',1,478,376)
;等待选项界面控件可见
Do
        Sleep(300)
Until ControlCommand($Hwnd,'','SkinWindow2','IsVisible')
;点击附加的广告选项
ControlClick($Hwnd,'','SkinWindow2','',1,142,231)
ControlClick($Hwnd,'','SkinWindow2','',1,142,256)
ControlClick($Hwnd,'','SkinWindow2','',1,142,280)
ControlClick($Hwnd,'','SkinWindow2','',1,142,302)
;点击下一步
Sleep(500)
ControlClick($Hwnd,'','SkinWindow2','',1,473,373)
Sleep(17000)
Do 
        Sleep(300)
        Until ControlCommand($Hwnd,'','SkinWindow4','IsVisible')

WinActivate($Hwnd,'')
WinWaitActive($Hwnd,'')
ControlClick($Hwnd,'','SkinWindow4','',1,473,373)


Sleep(1000)
WinWait('新功能推荐-暴风影音')
Sleep(100)
ProcessClose("Welcome.exe")
ProcessClose("StormPlayer.exe")
ProcessClose("baofengplatform.exe")
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run","BaofengPlatform")
 FileDelete(@AppDataDir & "\Microsoft\Internet Explorer\Quick Launch\暴风影音5.lnk")
 Opt('TrayIconHide',1);刷新一下
Opt('TrayIconHide',0)
发表于 2013-1-22 23:00:47 | 显示全部楼层
立即体验 按钮有控件ID吗,建议用窗口信息工具查看它,贴个图
发表于 2013-1-22 23:04:54 | 显示全部楼层
本帖最后由 afan 于 2013-1-22 23:07 编辑

针对第2个问题,4-9行替换为以下试试~
$Hwnd = WinWait('[REGEXPTITLE:暴风影音安装提示|安装 暴风影音5 正式版]')
If StringInStr(WinGetTitle($Hwnd), '提示') Then ;如果已经安装过暴风影音,确认覆盖安装
        WinActivate("暴风影音安装提示")
        WinWaitActive("暴风影音安装提示")
        ControlClick("暴风影音安装提示", "", "Button1")
        $Hwnd = WinWait('安装 暴风影音5 正式版')
EndIf
 楼主| 发表于 2013-1-22 23:40:29 | 显示全部楼层
afan超版的方法解决了第二个问题,javascript:;可以跳过第一个对话框了。谢谢超版。下面是鼠标放在”立即体验“按钮上的截图,


工具得到的内容是:

>>>> 窗口 <<<<   
标题:        安装 暴风影音5 正式版
类名:        SkinWindow
坐标:        450, 277
大小:        540, 400
样式:        0x960A0000
扩展样式:0x00000004
句柄:        0x009306CE

>>>> 控件信息 <<<<   
类名:        SkinWindow
接口:        4
类别名:        SkinWindow4
名称:       
高级模式(类):[CLASS:SkinWindow; INSTANCE:4]
ID:        84481620
文本:       
坐标:        0, 0
大小:        540, 400
控件点击坐标:        479, 376
样式:        0x56010000
扩展样式:0x00000000
句柄:        0x0015075A

>>>> 鼠标信息 <<<<
坐标:        929, 653
光标 ID:        0
颜色:        0xB7DCFF

>>>> 状态栏信息 <<<<   

>>>> 工具栏信息 <<<<

>>>> 可见文本 <<<<


>>>> 隐藏文本 <<<<
C:\Program Files\Baofeng\StormPlayer\

本帖子中包含更多资源

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

×
发表于 2013-1-22 23:57:25 | 显示全部楼层
回复 4# wangzihe


    这个按钮没有独立的控件ID,但应该还是可以关闭之的,比如你的第35行代码。关键是判断该窗口的出现。它的上一个窗口信息呢?没有按钮的界面?请贴图
发表于 2013-1-23 00:08:38 | 显示全部楼层
不是标准的控件 不好判断 在不调用外部插件的情况下 我觉得要不就判断 立即体验 这几个字的颜色吧。而且最好多判断几个点保证准确性 或者在 立即体验 出来之前那个位置是什么东西 如果没有其它按钮影响的话就一直循环点击那个位置
 楼主| 发表于 2013-1-23 01:02:05 | 显示全部楼层
本帖最后由 wangzihe 于 2013-1-23 01:16 编辑

运行程序后,第一个界面是这样的:



信息:

>>>> 窗口 <<<<   
标题:        安装 暴风影音5 正式版
类名:        SkinWindow
坐标:        450, 275
大小:        540, 400
样式:        0x960A0000
扩展样式:0x00000004
句柄:        0x00210FE6

>>>> 控件信息 <<<<   
类名:        SkinWindow
接口:        1
类别名:        SkinWindow1
名称:       
高级模式(类):[CLASS:SkinWindow; INSTANCE:1]
ID:        52537764
文本:       
坐标:        0, 0
大小:        540, 400
控件点击坐标:        474, 375
样式:        0x56010000
扩展样式:0x00000000
句柄:        0x00160FC0

>>>> 鼠标信息 <<<<
坐标:        924, 650
光标 ID:        0
颜色:        0xBADDFF

>>>> 状态栏信息 <<<<   

>>>> 工具栏信息 <<<<

>>>> 可见文本 <<<<


>>>> 隐藏文本 <<<<
C:\Program Files\Baofeng\StormPlayer\


点击”开始安装“按钮,第二个界面这样:



信息是:

>>>> 窗口 <<<<   
标题:        安装 暴风影音5 正式版
类名:        SkinWindow
坐标:        450, 275
大小:        540, 400
样式:        0x960A0000
扩展样式:0x00000004
句柄:        0x00150816

>>>> 控件信息 <<<<   
类名:        SkinWindow
接口:        2
类别名:        SkinWindow2
名称:       
高级模式(类):[CLASS:SkinWindow; INSTANCE:2]
ID:        52541180
文本:       
坐标:        0, 0
大小:        540, 400
控件点击坐标:        474, 373
样式:        0x56010000
扩展样式:0x00000000
句柄:        0x0016080E

>>>> 鼠标信息 <<<<
坐标:        924, 648
光标 ID:        0
颜色:        0x000000

>>>> 状态栏信息 <<<<   

>>>> 工具栏信息 <<<<

>>>> 可见文本 <<<<
C:\Program Files\Baofeng\StormPlayer\


>>>> 隐藏文本 <<<<



点击“下一步”,第三个窗口如下:



窗口信息是:

>>>> 窗口 <<<<   
标题:        安装 暴风影音5 正式版
类名:        SkinWindow
坐标:        450, 275
大小:        540, 400
样式:        0x960A0000
扩展样式:0x00000004
句柄:        0x00150816

>>>> 控件信息 <<<<   
类名:        SkinWindow
接口:        4
类别名:        SkinWindow4
名称:       
高级模式(类):[CLASS:SkinWindow; INSTANCE:4]
ID:        84481620
文本:       
坐标:        0, 0
大小:        540, 400
控件点击坐标:        475, 374
样式:        0x56010000
扩展样式:0x00000000
句柄:        0x000A0FCE

>>>> 鼠标信息 <<<<
坐标:        925, 649
光标 ID:        2
颜色:        0xCFDDE9

>>>> 状态栏信息 <<<<   

>>>> 工具栏信息 <<<<

>>>> 可见文本 <<<<


>>>> 隐藏文本 <<<<
C:\Program Files\Baofeng\StormPlayer\


此时的”正在安装“按钮是灰色不可点击状态,扥安装进度条跑到头,就变成了可点击的”立即体验“按钮了。就是我在4楼发的那个图和信息。
具体怎么做,请前辈们指教一二,先谢谢楼上的几位热心坛友了。

本帖子中包含更多资源

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

×
发表于 2013-1-23 08:07:03 | 显示全部楼层
还是自己重新打包一下,再写au3不久简单多了~
发表于 2013-1-23 08:51:34 | 显示全部楼层
楼主为何不尝试结束进程呢?
发表于 2013-1-23 10:07:29 | 显示全部楼层
本帖最后由 afan 于 2013-1-23 13:39 编辑

暂且用学习操作的态度来搞吧,毕竟楼主已经很用心在研究了

28-31行替换为以下试试:
Opt('PixelCoordMode', 0)
Do
        Sleep(10)
Until WinActive($Hwnd) And (PixelGetColor(440, 366, $Hwnd) <> PixelGetColor(440, 385, $Hwnd))
;
另一种方式,可以试试将以下脚本单独保存,分别在“正在安装…”及“开始体验”界面时执行一次
$Hwnd=WinWait('安装 暴风影音5 正式版')
Opt('PixelCoordMode', 0)
$v = PixelGetColor(440, 366, $Hwnd)
FileWrite('色值.txt', $v & @CRLF)
之后打开“色值.txt”取用第一行和第二行的值,比如分别为“55555555”和“12345678”。同样替换28-31行。
Opt('PixelCoordMode', 0)
Do
        Sleep(10)
Until PixelGetColor(440, 366, $Hwnd) = 55555555
Do
        Sleep(10)
Until PixelGetColor(440, 366, $Hwnd) = 12345678
如果界面不依赖系统主题的话这种取色方式可能更加保险。
 楼主| 发表于 2013-1-23 23:41:24 | 显示全部楼层
多谢afan超版,你的第一种方法就解决问题了。
我也测试了你给我的第二种方法,试了好几次,可是取得的值都是一样的。我又换了坐标取那个绿色进度条的值测试,结果取得的色值也都一样。不知道是什么原因。留待以后慢慢研究吧,反正日子还长着呢。

总之在各位坛友的帮助下,问题终于解决了。再次谢谢各位坛友,尤其是afan超版的耐心解答,非常非常感谢!我觉得重要的不是结果,而是在追求结果的过程中得到的那种心情才是值得珍惜的。
发表于 2013-2-19 13:41:39 | 显示全部楼层
楼主为何不尝试结束进程呢?
yinbinly 发表于 2013-1-23 08:51



    同意此说法!
ProcessWait("MediaLibraryUpdate.exe")
ProcessWaitClose("MediaLibraryUpdate.exe")
ProcessClose("Baofeng5-5.21.0131.exe")
发表于 2013-3-14 19:37:41 | 显示全部楼层
获益匪浅~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 09:27 , Processed in 0.097690 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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