|
|
你所说的静默安装是完全看不到安装界面还是仅仅自动化操作?
- #Region ;**** 由 AutoIt3Wrapper_GUI 编译参数创建 ****
- #AutoIt3Wrapper_Icon=
- #AutoIt3Wrapper_Outfile=搜狗输入法自动安装.exe
- #AutoIt3Wrapper_Compression=4
- #AutoIt3Wrapper_UseUpx=y
- #AutoIt3Wrapper_Change2CUI=y
- #AutoIt3Wrapper_Run_AU3Check=n
- #EndRegion ;**** 由 AutoIt3Wrapper_GUI 编译参数创建 ****
- Opt("TrayIconHide", 1) ; 隐藏托盘图标
- Opt("WinTitleMatchMode", 2) ; 窗口标题部分匹配
- Opt("MouseClickDelay", 5) ; 减少鼠标点击延迟
- Opt("SendKeyDelay", 2) ; 减少按键延迟
- ; 主安装程序文件名
- Global $sSetupExe = "搜狗输入法v12.5.0.6558去广告精简优化版.exe"
- ; 气泡提示函数
- Func _ShowBubbleTip($sMessage)
- ToolTip($sMessage, @DesktopWidth/2, 10, "搜狗输入法自动安装", 1, 1)
- EndFunc
- Func _ClearBubbleTip()
- ToolTip("")
- EndFunc
- ; 等待特定控件出现
- Func _WaitForControl($hWnd, $sControlID, $iTimeout = 10)
- Local $iStart = TimerInit()
-
- While TimerDiff($iStart) < $iTimeout * 1000
- Local $hControl = ControlGetHandle($hWnd, "", $sControlID)
- If $hControl Then
- Return True
- EndIf
- Sleep(50)
- WEnd
-
- Return False
- EndFunc
- ; 等待控件文本出现
- Func _WaitForControlText($hWnd, $sControlID, $sText, $iTimeout = 10)
- Local $iStart = TimerInit()
-
- While TimerDiff($iStart) < $iTimeout * 1000
- Local $hControl = ControlGetHandle($hWnd, "", $sControlID)
- If $hControl Then
- Local $sControlText = ControlGetText($hWnd, "", $sControlID)
- If StringInStr($sControlText, $sText) Then
- Return True
- EndIf
- EndIf
- Sleep(50)
- WEnd
-
- Return False
- EndFunc
- ; 快速点击函数
- Func _QuickClick($hWnd, $sControlID)
- Local $hControl = ControlGetHandle($hWnd, "", $sControlID)
- If $hControl Then
- ControlClick($hWnd, "", $sControlID)
- Return True
- EndIf
- Return False
- EndFunc
- ; 处理已安装版本提示
- Func _HandleAlreadyInstalled()
- Local $hWindow = WinWait("搜狗输入法", "系统里已经安装了相同的版本", 2)
-
- If $hWindow Then
- _ShowBubbleTip("检测到已安装版本,点击是继续...")
- WinActivate($hWindow)
- Sleep(50)
-
- ; 使用多种方式点击"是"按钮
- For $i = 1 To 3
- ControlClick($hWindow, "", "[CLASS:Button; INSTANCE:1]")
- Sleep(20)
- ControlSend($hWindow, "", "", "{ENTER}")
- Sleep(20)
-
- If Not WinExists($hWindow) Then
- ExitLoop
- EndIf
- Next
-
- ; 等待窗口关闭
- Local $iWait = 0
- While WinExists($hWindow) And $iWait < 5
- Sleep(50)
- $iWait += 1
- WEnd
-
- Return True
- EndIf
-
- Return False
- EndFunc
- ; 主要安装流程
- _ShowBubbleTip("启动安装程序...")
- ; 检查安装程序是否存在
- If Not FileExists($sSetupExe) Then
- _ShowBubbleTip("错误: 未找到安装程序")
- Sleep(1500)
- _ClearBubbleTip()
- Exit 1
- EndIf
- ; 运行安装程序
- Local $iPID = Run($sSetupExe)
- If $iPID = 0 Then
- _ShowBubbleTip("错误: 无法启动安装程序")
- Sleep(1500)
- _ClearBubbleTip()
- Exit 1
- EndIf
- Sleep(100) ; 短暂等待让安装程序启动
- ; 步骤0: 处理已安装版本提示
- _HandleAlreadyInstalled()
- ; 步骤1: 等待主安装窗口
- Local $hMainWindow = WinWait("搜狗输入法 安装", "", 5)
- If Not $hMainWindow Then
- _ShowBubbleTip("错误: 未找到安装窗口")
- Sleep(1500)
- _ClearBubbleTip()
- Exit 1
- EndIf
- _ShowBubbleTip("开始安装流程...")
- WinActivate($hMainWindow)
- Sleep(50)
- ; 步骤2: 点击第一个下一步
- _ShowBubbleTip("点击下一步...")
- _QuickClick($hMainWindow, "[ID:1]")
- Sleep(80)
- ; 步骤3: 检查并处理组件选择界面
- _ShowBubbleTip("检查组件选项...")
- If _WaitForControl($hMainWindow, "SysTreeView321", 2) Then
- ; 组件选择界面存在,勾选第三项
- ControlFocus($hMainWindow, "", "SysTreeView321")
- Sleep(300)
-
- ControlTreeView($hMainWindow, "", "SysTreeView321", "Select", "#2")
- Sleep(300)
-
- ControlSend($hMainWindow, "", "SysTreeView321", "{SPACE}")
- Sleep(500)
-
- _ShowBubbleTip("继续下一步...")
- _QuickClick($hMainWindow, "[ID:1]")
- Sleep(80)
- EndIf
- ; 步骤4: 点击安装按钮
- _ShowBubbleTip("开始安装...")
- _QuickClick($hMainWindow, "[ID:1]")
- Sleep(80)
- ; 步骤5: 等待安装完成
- _ShowBubbleTip("正在安装...")
- ; 等待完成界面出现 - 等待"完成"按钮出现
- Local $bInstallComplete = False
- Local $iTimeout = 0
- While Not $bInstallComplete And $iTimeout < 60 ; 最多等待60秒
- ; 检查窗口是否仍然存在
- If Not WinExists($hMainWindow) Then
- ; 窗口已关闭,可能安装已完成
- _ShowBubbleTip("安装窗口已关闭,安装可能已完成")
- $bInstallComplete = True
- ExitLoop
- EndIf
-
- ; 检查是否出现"完成"按钮
- If _WaitForControlText($hMainWindow, "[ID:1]", "完成", 1) Then
- _ShowBubbleTip("检测到完成按钮")
- $bInstallComplete = True
- ExitLoop
- EndIf
-
- Sleep(500)
- $iTimeout += 1
-
- ; 每5秒更新一次提示
- If Mod($iTimeout, 10) = 0 Then
- _ShowBubbleTip("正在安装... 已等待 " & $iTimeout/2 & " 秒")
- EndIf
- WEnd
- _ClearBubbleTip()
- ; 步骤6: 处理安装完成界面
- If WinExists($hMainWindow) Then
- ; 确保窗口激活
- WinActivate($hMainWindow)
- Sleep(100)
-
- _ShowBubbleTip("正在处理安装完成选项...")
-
- ; 首先等待并选择"不重启"选项
- If _WaitForControl($hMainWindow, "[ID:1204]", 5) Then
- _ShowBubbleTip("选择不重启选项...")
-
- ; 等待更长时间确保控件完全加载
- Sleep(300)
-
- ; 点击不重启选项
- For $i = 1 To 3
- _QuickClick($hMainWindow, "[ID:1204]")
- Sleep(100)
-
- ; 同时尝试文本点击
- ControlClick($hMainWindow, "否,我会在之后重新启动(&N)", "[TEXT:否,我会在之后重新启动(&N)]")
- Sleep(100)
-
- ; 尝试Button5
- ControlClick($hMainWindow, "", "Button5")
- Sleep(100)
-
- ; 等待选项生效
- Sleep(200)
- Next
-
- _ShowBubbleTip("不重启选项已选择")
- EndIf
-
- ; 等待完成按钮完全出现
- If _WaitForControlText($hMainWindow, "[ID:1]", "完成", 5) Then
- _ShowBubbleTip("点击完成按钮...")
-
- ; 等待确保完成按钮可用
- Sleep(300)
-
- ; 点击完成按钮
- For $i = 1 To 3
- _QuickClick($hMainWindow, "[ID:1]")
- Sleep(100)
-
- ; 同时尝试文本点击
- ControlClick($hMainWindow, "完成(&F)", "[TEXT:完成(&F)]")
- Sleep(100)
-
- ; 尝试Button2
- ControlClick($hMainWindow, "", "Button2")
- Sleep(100)
-
- ; 检查窗口是否已关闭
- If Not WinExists($hMainWindow) Then
- ExitLoop
- EndIf
- Next
-
- ; 如果窗口还在,尝试坐标点击
- If WinExists($hMainWindow) Then
- _ShowBubbleTip("使用坐标点击完成按钮...")
- Local $aPos = WinGetPos($hMainWindow)
- If IsArray($aPos) Then
- ; 根据您提供的坐标: 位置324,302 和 ControlClick坐标40,12
- Local $iClickX = $aPos[0] + 324 + 40
- Local $iClickY = $aPos[1] + 302 + 12
- MouseClick("left", $iClickX, $iClickY, 1, 0)
- Sleep(200)
- EndIf
- EndIf
- EndIf
-
- ; 等待窗口关闭
- Local $iCloseTimeout = 0
- While WinExists($hMainWindow) And $iCloseTimeout < 10
- _QuickClick($hMainWindow, "[ID:1]")
- Sleep(200)
- $iCloseTimeout += 1
- WEnd
-
- If WinExists($hMainWindow) Then
- _ShowBubbleTip("警告: 安装窗口仍未关闭")
- Sleep(1000)
- EndIf
- EndIf
- _ClearBubbleTip()
- ; 安装完成提示
- _ShowBubbleTip("搜狗输入法安装完成!")
- Sleep(800)
- _ClearBubbleTip()
- Exit 0
复制代码 |
评分
-
查看全部评分
|