wdmomo 发表于 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")

经测试功能上还算可行,感觉代码量重复的有点多,有没有更简单一点的实现方法?
小弟在此先谢过了!!!
祝大家新年快乐~

love5173 发表于 2011-2-3 12:32:30

额,偶有2套思路
1、用case写case 只写一遍就好 其他全是case这样即使是中途你用手操作过也不会影响后学操作
2、用户自定义函数 吧检查错误的代码定义一下就好了 ,起码看起来没那么长了
用户自定义函数是Func函数名() endfunc 结束
加油{:1_554:}

love5173 发表于 2011-2-3 12:35:45

需要我给你把代码写出来的话,就喊姐姐

love5173 发表于 2011-2-3 12:40:57

写case的时候别忘记加上循环啊 要不只能执行一步的

love5173 发表于 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注册一个函数做检测。

如果不想让用户干预安装过程,可以禁止用户操作这个安装界面嘛!

wdmomo 发表于 2011-2-3 12:58:24

回复 5# love5173


    {:face (88):}谢谢啦,好好研究研究...
新年快乐,嘿嘿~~

wdmomo 发表于 2011-2-3 13:02:01

回复 6# 水木子


    {:face (382):}
还要深入学习一下,现在简单的还不是很会的说...
谢谢指点,在此谢过,新年快乐~~

wdmomo 发表于 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
嗯!不错!就是这样。

netegg 发表于 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的,两层循环嵌套也用不着

wdmomo 发表于 2011-2-5 19:19:24

回复 11# netegg


    好像不行,程序是自解压做的,安装过程中分两个阶段:解压和软件真正的安装。打开后office.exe一直在运行,直到整个过程结束,setup.exe才是真正的软件安装进程,setup.exe结束后,office.exe也结束,在解压过程中中断安装无警告消息,安装过程中中断将提示消息,所以在解压过程中写了一个提示消息。
不过感谢你的代码,给我学习上的帮助{:face (310):}

chenzh 发表于 2011-9-22 15:27:04

需要一个鼠标点击的脚本

gzh888666 发表于 2011-9-22 15:52:41

回复水木子


    学习了,用 AdlibRegister注册一个函数搞定
wdmomo 发表于 2011-2-3 14:54 http://www.autoitx.com/images/common/back.gif
太聪明了,我都学了N久了,都没有你牛X!

水风青木 发表于 2011-10-17 23:14:23

顶下! 学习中... {:face (382):}这种讨论帖对新人很有帮助!
页: [1] 2
查看完整版本: 帮忙看下这个代码,软件自动安装,有没有更简单的方法?[已解决]