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

[AU3基础] 【已解决】安装FreeFileSync遇到的问题

[复制链接]
发表于 2024-1-20 16:55:38 | 显示全部楼层 |阅读模式
本帖最后由 fybhwsx 于 2024-1-25 11:53 编辑
#include <WinAPISysWin.au3>

;软件下载地址:https://freefilesync.org/
Local $FreeFileSync_lnk = 'C:\Users\Public\Desktop\FreeFileSync.lnk' ;公共桌面快捷方式
        FileGetShortcut($FreeFileSync_lnk)
        If @error Then
                ShellExecute('Z:\FreeFileSync_13.3_Setup.exe') ;运行安装程序
                Local $azckjb, $aData, $i, $zckwb

                ;点击《我同意此协议》
                $azckjb = WinWaitActive('[CLASS:TWizardForm]', '许可协议')
                $aData = _WinAPI_EnumChildWindows($azckjb) ;枚举指定父窗的子窗口(可见)
                For $i = 1 To $aData[0][0]
                        $zckwb = ControlGetText($azckjb, '', $aData[$i][0])
                        If StringInStr($zckwb, '我同意此协议') Then
                                If ControlClick($azckjb, '', $aData[$i][0]) Then ExitLoop
                        EndIf
                Next
                ;点击《下一步》
                For $i = 1 To $aData[0][0]
                        $zckwb = ControlGetText($azckjb, '', $aData[$i][0])
                        If StringInStr($zckwb, '下一步') Then
                                If ControlClick($azckjb, '', $aData[$i][0]) Then ExitLoop
                        EndIf
                Next
                WinWaitActive('[CLASS:TWizardForm]', '选择目标位置')
                ;点击《下一步》
                For $i = 1 To $aData[0][0]
                        $zckwb = ControlGetText($azckjb, '', $aData[$i][0])
                        If StringInStr($zckwb, '下一步') Then
                                If ControlClick($azckjb, '', $aData[$i][0]) Then ExitLoop
                        EndIf
                Next
                WinWaitActive('[CLASS:TWizardForm]', '选择组件')
                ;点击《下一步》
                For $i = 1 To $aData[0][0]
                        $zckwb = ControlGetText($azckjb, '', $aData[$i][0])
                        If StringInStr($zckwb, '下一步') Then
                                If ControlClick($azckjb, '', $aData[$i][0]) Then ExitLoop
                        EndIf
                Next
                WinWaitActive('[CLASS:TWizardForm]', '不是广告')
                ;点击《下一步》
                For $i = 1 To $aData[0][0]
                        $zckwb = ControlGetText($azckjb, '', $aData[$i][0])
                        If StringInStr($zckwb, '下一步') Then
                                If ControlClick($azckjb, '', $aData[$i][0]) Then ExitLoop
                        EndIf
                Next
                ;点击《完成》
                WinWaitActive('[CLASS:TWizardForm]', '安装完成')
                Local $ds
                For $i = 15 To 1 Step -1
                        Local $zckwb = ControlGetText('[CLASS:TWizardForm]', '安装完成', 'TNewButton' & $i)
                        ;此处用StringInStr或StringRegExp比较不出控件文本?!(首次安装还能比较出来,卸载再安装就无效?)后来观察这个《完成》的按钮就是倒数第二个控件,只能无确认的瞎点了。。
                        If $zckwb Then $ds += 1
                        If $ds = 2 Then
                                ControlFocus('[CLASS:TWizardForm]', '安装完成', 'TNewButton' & $i)
                                ControlClick('[CLASS:TWizardForm]', '安装完成', 'TNewButton' & $i)
                                ExitLoop
                        EndIf
                Next
        EndIf
这个软件的控件接口不固定,诡异的是最后一步点击《完成》按钮时,比较不出控件文本。谁有空闲时间帮忙测试一下上面的安装代码,看能不能在你们的电脑上安装。有没有更简单有效(卸载几次试试脚本都能安装回来)的方法能分享一下!


发表于 2024-1-25 09:56:49 | 显示全部楼层
为啥不找静默安装参数呢?一般是 /S 或者/install 之类的,多试试
 楼主| 发表于 2024-1-25 10:10:08 | 显示全部楼层
风过无痕 发表于 2024-1-25 09:56
为啥不找静默安装参数呢?一般是 /S 或者/install 之类的,多试试

感谢,特意搜了一下,没有发现这个软件静默安装的相关信息。
发表于 2024-1-25 11:28:05 | 显示全部楼层
对最末的那段问题感兴趣,测试确实有问题,因为文本获取时有时无,ID号也是会变~
原本以为提取文件做便携版就行,安装时才发现有条件… 那就不用试了 … _ _||
这样试试,我测试了N次都是ok~
$azckjb = WinWaitActive('[CLASS:TWizardForm]', '安装完成')
$aData = _WinAPI_EnumChildWindows($azckjb) ;枚举指定父窗的子窗口(可见)
Local $aPos
For $i = 1 To $aData[0][0]
        If $aData[$i][1] = 'TNewButton' Then
                $aPos = ControlGetPos($azckjb, '', $aData[$i][0])
                If Not @error And($aPos[2] > 0 And $aPos[2] < 300) Then
                        ControlClick($azckjb, '', $aData[$i][0])
                        Exitloop
                EndIf
        EndIf
Next

评分

参与人数 1金钱 +40 收起 理由
fybhwsx + 40 很给力!测试几次都成功安装!

查看全部评分

 楼主| 发表于 2024-1-25 12:16:49 | 显示全部楼层
afan 发表于 2024-1-25 11:28
对最末的那段问题感兴趣,测试确实有问题,因为文本获取时有时无,ID号也是会变~
原本以为提取文件做便携版 ...

a版,我测试控件文本能获取到,但用StringInStr或StringRegExp无法比较确认,这是我无法理解的问题。我这水平有限研究不了这问题了,能用就行,感谢a版!
发表于 2024-1-25 12:33:02 | 显示全部楼层
本帖最后由 afan 于 2024-1-25 12:36 编辑
fybhwsx 发表于 2024-1-25 12:16
a版,我测试控件文本能获取到,但用StringInStr或StringRegExp无法比较确认,这是我无法理解的问题。我这 ...

能获取到 >>> 我之前用 Au3.WProbe 测试过了,拖动靶标捕获,控件其它信息都能获取到,但文本却是时有时无(或无法显示),这也是我感兴趣的地方。

(首次安装还能比较出来,卸载再安装就无效?)这也是时有时无的原因,能获取到就不会有 StringInStr 或 StringRegExp 无法匹配到的问题了

评分

参与人数 1金钱 +40 收起 理由
fybhwsx + 40 好,明白了。

查看全部评分

发表于 2024-1-26 09:03:59 | 显示全部楼层
刚试了下,如果只是自用,不考虑别的,最后一步直接按回车键就行。

评分

参与人数 1金钱 +40 收起 理由
fybhwsx + 40 赞一个!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-2 15:29 , Processed in 0.091358 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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