找回密码
 加入
搜索
查看: 7255|回复: 16

[AU3基础] 帮忙看下这个代码,软件自动安装,有没有更简单的方法?[已解决]

 火.. [复制链接]
发表于 2011-2-3 11:51:52 | 显示全部楼层 |阅读模式
本帖最后由 wdmomo 于 2011-2-3 14:57 编辑

小弟刚学AU3没几天,主要都看着AU3的帮助文档在学习,对很多函数也不是很熟悉。
试着自己写了个自解压格式做的office2003精简版的自动安装脚本。
代码如下:
Run("office2003.exe")
WinWaitActive("Microsoft Office 2003 安装","用户信息")
Send("{enter}")
WinWaitActive("Microsoft Office 2003 安装","安装类型")
Send("!n")
WinWaitActive("Microsoft Office 2003 安装","摘要")
Send("!i")
WinWaitActive("Microsoft Office 2003 安装","安装已完成")
Send("!f")
发现一个问题,就是在安装过程中如何用户中断安装,脚本将暂停运行,无法退出,于是加了个循环检测语句(不知道这样称呼对不对)
代码如下:

Run("office2003.exe")
Do
If ProcessExists("office2003.exe") = 0 Then
        If MsgBox(0, "error", "安装被意外终止,请重新安装.") = 1 Then
                Exit
                EndIf
        EndIf
Until ProcessExists("setup.exe")
Do
        If WinActive("Microsoft Office 2003 安装","用户信息") = 0 Then
                If ProcessExists("office2003.exe") = 0 Then
                Exit
EndIf
EndIf
Until WinActive("Microsoft Office 2003 安装","用户信息")
WinWaitActive("Microsoft Office 2003 安装","用户信息")
Send("{enter}")
Do
        If WinActive("Microsoft Office 2003 安装","安装类型") = 0 Then
                If ProcessExists("office2003.exe") = 0 Then
                Exit
EndIf
EndIf
Until WinActive("Microsoft Office 2003 安装","安装类型")
WinWaitActive("Microsoft Office 2003 安装","安装类型")
Send("!n")
Do
        If WinActive("Microsoft Office 2003 安装","摘要") = 0 Then
                If ProcessExists("office2003.exe") = 0 Then
                Exit
EndIf
EndIf
Until WinActive("Microsoft Office 2003 安装","摘要")
WinWaitActive("Microsoft Office 2003 安装","摘要")
Send("!i")
Do
        If WinActive("Microsoft Office 2003 安装","安装已完成") = 0 Then
                If ProcessExists("office2003.exe") = 0 Then
                Exit
EndIf
EndIf
Until WinActive("Microsoft Office 2003 安装","安装已完成")
WinWaitActive("Microsoft Office 2003 安装","安装已完成")
Send("!f")

经测试功能上还算可行,感觉代码量重复的有点多,有没有更简单一点的实现方法?
小弟在此先谢过了!!!
祝大家新年快乐~
发表于 2011-2-3 12:32:30 | 显示全部楼层
额,偶有2套思路
1、用case写  case 只写一遍就好 其他全是case  这样即使是中途你用手操作过也不会影响后学操作
2、用户自定义函数 吧检查错误的代码定义一下就好了 ,起码看起来没那么长了
用户自定义函数是Func  函数名() endfunc 结束  
加油
发表于 2011-2-3 12:35:45 | 显示全部楼层
需要我给你把代码写出来的话,就喊姐姐
发表于 2011-2-3 12:40:57 | 显示全部楼层
写case的时候别忘记加上循环啊 要不只能执行一步的
发表于 2011-2-3 12:48:55 | 显示全部楼层
Run("office2003.exe")
Do
While 1
   Case WinWaitActive("Microsoft Office 2003 安装","用户信息")
             Send("{enter}")
   Case WinWaitActive("Microsoft Office 2003 安装","安装类型")
         Send("!n")
    Case WinWaitActive("Microsoft Office 2003 安装","摘要")
         Send("!i")
    Case   WinWaitActive("Microsoft Office 2003 安装","安装已完成")
                Send("!f")
        Case ;此处写查错1
    Case ;此处写查错2                
Until ProcessExists("office2003.exe") = 0
我手头没有这个程序的安装,但是你肯定写的查错方式有点冗长,你改改吧
发表于 2011-2-3 12:50:36 | 显示全部楼层
没那个必要了!

如果要循环检查用户是否退出了安装,可以用 AdlibRegister  注册一个函数做检测。

如果不想让用户干预安装过程,可以禁止用户操作这个安装界面嘛!
 楼主| 发表于 2011-2-3 12:58:24 | 显示全部楼层
回复 5# love5173


    谢谢啦,好好研究研究...
新年快乐,嘿嘿~~
 楼主| 发表于 2011-2-3 13:02:01 | 显示全部楼层
回复 6# 水木子


   
还要深入学习一下,现在简单的还不是很会的说...
谢谢指点,在此谢过,新年快乐~~
 楼主| 发表于 2011-2-3 14:54:55 | 显示全部楼层
回复 6# 水木子


    学习了,用 AdlibRegister  注册一个函数搞定
Run("office2003.exe")
Do
If ProcessExists("office2003.exe") = 0 Then
        If MsgBox(0, "error", "安装被意外终止,请重新安装.") = 1 Then
                Exit
                EndIf
        EndIf
Until ProcessExists("setup.exe")
AdlibRegister("Adlib")
Func Adlib()
                If ProcessExists("office2003.exe") = 0 Then
                Exit
EndIf
EndFunc
WinWaitActive("Microsoft Office 2003 安装","用户信息")
Send("{enter}")
WinWaitActive("Microsoft Office 2003 安装","安装类型")
Send("!n")
WinWaitActive("Microsoft Office 2003 安装","摘要")
Send("!i")
WinWaitActive("Microsoft Office 2003 安装","安装已完成")
Send("!f")
发表于 2011-2-3 15:02:45 | 显示全部楼层
回复 9# wdmomo
嗯!不错!就是这样。
发表于 2011-2-3 15:21:30 | 显示全部楼层
本帖最后由 netegg 于 2011-2-3 15:34 编辑
While 1
        If ProcessExists("setup.exe") And Not (ProcessExists("office2003.exe")) Then
                WinWaitActive("Microsoft Office 2003 安装", "用户信息")
                Send("{enter}")
                WinWaitActive("Microsoft Office 2003 安装", "安装类型")
                Send("!n")
                WinWaitActive("Microsoft Office 2003 安装", "摘要")
                Send("!i")
                WinWaitActive("Microsoft Office 2003 安装", "安装已完成")
                Send("!f")
        Else
               if Not ProcessExists("setup.exe")  then 
                  MsgBox(0, "error", "安装被意外终止,请重新安装.")
                  ExitLoop
              endif
        EndIf
WEnd
可能有些问题,不知道楼主的具体要求,用不着adlib的,两层循环嵌套也用不着
 楼主| 发表于 2011-2-5 19:19:24 | 显示全部楼层
回复 11# netegg


    好像不行,程序是自解压做的,安装过程中分两个阶段:解压和软件真正的安装。打开后office.exe一直在运行,直到整个过程结束,setup.exe才是真正的软件安装进程,setup.exe结束后,office.exe也结束,在解压过程中中断安装无警告消息,安装过程中中断将提示消息,所以在解压过程中写了一个提示消息。
  不过感谢你的代码,给我学习上的帮助
发表于 2011-9-22 15:27:04 | 显示全部楼层
需要一个鼠标点击的脚本
发表于 2011-9-22 15:52:41 | 显示全部楼层
回复  水木子


    学习了,用 AdlibRegister  注册一个函数搞定
wdmomo 发表于 2011-2-3 14:54

太聪明了,我都学了N久了,都没有你牛X!
发表于 2011-10-17 23:14:23 | 显示全部楼层
顶下! 学习中... 这种讨论帖对新人很有帮助!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 23:28 , Processed in 0.091664 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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