fybhwsx 发表于 2024-1-20 16:55:38

【已解决】安装FreeFileSync遇到的问题

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


风过无痕 发表于 2024-1-25 09:56:49

为啥不找静默安装参数呢?一般是 /S 或者/install 之类的,多试试

fybhwsx 发表于 2024-1-25 10:10:08

风过无痕 发表于 2024-1-25 09:56
为啥不找静默安装参数呢?一般是 /S 或者/install 之类的,多试试

感谢,特意搜了一下,没有发现这个软件静默安装的相关信息。

afan 发表于 2024-1-25 11:28:05

对最末的那段问题感兴趣,测试确实有问题,因为文本获取时有时无,ID号也是会变~
原本以为提取文件做便携版就行,安装时才发现有条件… 那就不用试了 … _ _||
这样试试,我测试了N次都是ok~
$azckjb = WinWaitActive('', '安装完成')
$aData = _WinAPI_EnumChildWindows($azckjb) ;枚举指定父窗的子窗口(可见)
Local $aPos
For $i = 1 To $aData
      If $aData[$i] = 'TNewButton' Then
                $aPos = ControlGetPos($azckjb, '', $aData[$i])
                If Not @error And($aPos > 0 And $aPos < 300) Then
                        ControlClick($azckjb, '', $aData[$i])
                        Exitloop
                EndIf
      EndIf
Next

fybhwsx 发表于 2024-1-25 12:16:49

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

a版,我测试控件文本能获取到,但用StringInStr或StringRegExp无法比较确认,这是我无法理解的问题。我这水平有限研究不了这问题了,能用就行,感谢a版!

afan 发表于 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 无法匹配到的问题了

风过无痕 发表于 2024-1-26 09:03:59

刚试了下,如果只是自用,不考虑别的,最后一步直接按回车键就行。
页: [1]
查看完整版本: 【已解决】安装FreeFileSync遇到的问题