找回密码
 加入
搜索
查看: 5472|回复: 8

[原创] 一份以前的学习笔记

[复制链接]
发表于 2012-3-8 08:42:24 | 显示全部楼层 |阅读模式
AutoIt基础实践练习笔记二

Cy10-ZouGuoKui 2010-4-21,新起点新加油!

1.我要自动给系统打补丁
示例1:
#include <File.au3>
$FileList = _FileListToArray(@ScriptDir & "\Update", "*.exe", 1);列出当前路径下的Update目录
;下的所有.exe文件
;语法  _FileListToArray($sPath[,$sFilter=”*”[,$iFlag=0]])
;列出指定路径既 $sPath下的文件和文件夹
;$sFilter 可选过滤器,默认是 * ,本例是 *.exe
;$iFlag 返回标志,0 是文件和文件夹都返回,1是仅返回文件,2是文件夹
;@error为1,找不到指定路径或路径非法,为4是找不到文件
;@error 为2,$sFilter不可用,为3 $iFlag不可用
If @error = 1 Then
        MsgBox(0, '', '没有找到文件夹,点击确定后自动创建')
        DirCreate(@ScriptDir & '\Update')
        Exit
EndIf
If @error = 4 Then
        MsgBox(0, '', '错误 文件夹中没有文件,清将补丁文件放入update文件夹')
        Exit
EndIf
For $i = 3 To 1 Step -1
        ToolTip(@CR & "  共" & $FileList[0] & "个系统补丁," & $i & "秒后开始安装...   " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
        Sleep(1000)
Next
For $i = 1 To $FileList[0]
        ToolTip(@CR & "  正在安装 " & $FileList[$i] & " (" & $i & "/" & $FileList[0] & ")   " & @CR, @DesktopWidth - 400, @DesktopHeight - 100)
; $FileList[$i] & " (" & $i & "/" & $FileList[0] & ")显示什么补丁第几个安装,美化窗口
        RunWait(@ScriptDir & "\Update\" & $FileList[$i] & " /quiet /passive /norestart")
Next
ToolTip(@CR & "  系 统 补 丁 安 装 完 毕 !  " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
Sleep(2000)
示例2:照猫画虎
#include <File.au3>
Dim $iRecords
If Not _FileReadToArray("PatchsList.txt",$iRecords) Then
;_FileReadToArray($FilePath,ByRef $aArray)
;将指定路径的文件内容读取到 指定数组中
        MsgBox(0,"发现错误","无法读取指定文件内容")
        Exit
EndIf
For $i = 3 To 1 Step -1
        ToolTip(@CR & "  共" & $iRecords[0] & "个系统补丁," & $i & "秒后开始安装...   " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
        Sleep(1000)
Next
For $i=1 To $iRecords[0]
        ToolTip(@CR & "  正在安装 " & $iRecords[$i] & " (" & $i & "/" & $iRecords[0] & ")   " & @CR, @DesktopWidth - 400, @DesktopHeight - 100)
        RunWait(@ScriptDir & "\Update\" & $iRecords[$i] & " /quiet /passive /norestart")
Next
ToolTip(@CR & "  系 统 补 丁 安 装 完 毕 !  " & @CR, @DesktopWidth - 260, @DesktopHeight - 100)
示例3:从指定网站下载补丁列表文件
;到指定网站下载指定目录下的文件
#Alternate
Local $DownLoadFile=InetGet("http://10.64.240.23:801/patchs/PatchsList.txt","patchslist.txt",1,1)
;定义变量$DownLoadFile接受IneGet返回的句柄信息
Do
        Sleep(250)
Until  InetGetInfo($DownLoadFile,2) ;检查下载是否完成
Local $DataInfo=InetGetInfo($DownLoadFile)
MsgBox(0,"显示相关下载信息","正在读取的字节: " & $DataInfo[0] & @CRLF & _
        "下载文件的大小: " &  $DataInfo[1] & @CRLF & _
                "下载是否完成?true表示文件下载过程完成:  "  & $DataInfo[2] & @CRLF & _
                "下载是否成功完成?true表示文件全部下载完毕:  "  & $DataInfo[3] & @CRLF)
2.我要自己制作系统工具?
示例1:消息模式版 GUIGetMsg()
;问题1:加上 Opt("GUIOnEventMode",1) 所有按钮都不好使?
;答:看到hynq2000说事件模式效率高,就简单的加上该语句,可是自己下面的循环判断是消息模式啊!当然导致所有按钮不好使啊!!!
;    将用于循环判断的语句写成Func()形式,就可以用事件模式了。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("系统工具集 ", 631, 454, 192, 114)
$Group1 = GUICtrlCreateGroup(".exe类", 48, 32, 169, 305)
$Button2 = GUICtrlCreateButton("Windows更新程序", 64, 56, 137, 33)
$Button3 = GUICtrlCreateButton("远程桌面", 64, 96, 137, 33)
$Button4 = GUICtrlCreateButton("系统信息", 64, 136, 137, 33)
$Button5 = GUICtrlCreateButton("文件签名验证程序", 64, 176, 137, 33)
$Button6 = GUICtrlCreateButton("任务管理器", 64, 216, 137, 33)
$Button7 = GUICtrlCreateButton("系统配置实用程序", 64, 256, 137, 33)
$Button8 = GUICtrlCreateButton("磁盘垃圾清理", 64, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(".msc类", 232, 32, 169, 305)
$Button9 = GUICtrlCreateButton("本地服务设置", 248, 56, 137, 33)
$Button10 = GUICtrlCreateButton("共享文件夹管理器", 248, 96, 137, 33)
$Button11 = GUICtrlCreateButton("磁盘碎片整理", 248, 136, 137, 33)
$Button12 = GUICtrlCreateButton("计算机管理", 248, 176, 137, 33)
$Button13 = GUICtrlCreateButton("磁盘管理", 248, 216, 137, 33)
$Button14 = GUICtrlCreateButton("本地安全设置", 248, 256, 137, 33)
$Button15 = GUICtrlCreateButton("设备管理器", 248, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup(".cpl类(控制面板)", 416, 32, 169, 305)
$Button16 = GUICtrlCreateButton("系统属性", 432, 56, 137, 33)
$Button17 = GUICtrlCreateButton("用户帐户", 432, 96, 137, 33)
$Button18 = GUICtrlCreateButton("自动更新", 432, 136, 137, 33)
$Button19 = GUICtrlCreateButton("网络连接", 432, 176, 137, 33)
$Button20 = GUICtrlCreateButton("区域和语言选项", 432, 216, 137, 33)
$Button21 = GUICtrlCreateButton("添加/删除程序", 432, 256, 137, 33)
$Button22 = GUICtrlCreateButton("Internet属性", 432, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("以上工具也可通过运行执行", 48, 352, 537, 65)
$Input1 = GUICtrlCreateInput("", 64, 376, 337, 21)
$Button1 = GUICtrlCreateButton("运行", 416, 368, 105, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("感谢hynq2000!仅为练手使用---采十青青橄榄  2010.4.27", 216, 424, 320, 66)
$Group5 = GUICtrlCreateGroup("", 32, 20, 569, 455)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button2 ;开始执行系统的exe文件,一般它们都在  \system32目录下
                        Run(@SystemDir&"\wupdmgr.exe")
                Case $Button3
                        Run(@SystemDir&"\mstsc.exe")
                Case $Button4
                        Run(@SystemDir&"\winmsd.exe")
                Case $Button5
                        Run(@SystemDir&"\sigverif.exe")
                Case $Button6
                        Run(@SystemDir&"\taskmgr.exe")
                Case $Button7
                        Run(@WindowsDir&"\pchealth\helpctr\binaries\Msconfig.exe") ;msconfig命令不在\system32目录下
                        ;Run(@SystemDir&"\tsshutdn.exe") 它是60秒倒计时关机命令
                Case $Button8
                        Run(@SystemDir&"\cleanmgr.exe")
                Case $Button9 ;开始执行系统的msc文件,一般它们都在  \system32目录下,通过shellexecute执行它们
                        ShellExecute(@SystemDir&"\services.msc")
                Case $Button10
                        ShellExecute(@SystemDir&"\fsmgmt.msc")
                Case $Button11
                        ShellExecute(@SystemDir&"\dfrg.msc")
                Case $Button12
                    ShellExecute(@SystemDir&"\compmgmt.msc")
                Case $Button13
                        ShellExecute(@SystemDir&"\diskmgmt.msc")
                Case $Button14
                        ShellExecute(@SystemDir&"\secpol.msc")
                Case $Button15
                        ShellExecute(@SystemDir&"\devmgmt.msc")
                Case $Button16 ;开始执行系统的cpl文件,一般它们都在  \system32目录下,通过control来执行.cpl文件
                        Run("control sysdm.cpl")
                Case $Button17
                        Run("control userpasswords2")
                        ;Run("control nusrmgr.cpl"),不知道为什么它不好使!
                Case $Button18
                        Run("control wuaucpl.cpl")
                Case $Button19
                        Run("control ncpa.cpl")
                Case $Button20
                        Run("control intl.cpl")
                Case $Button21
                        Run("control appwiz.cpl")
                Case $Button22
                        Run("control inetcpl.cpl")
                Case $Button1 ;执行 “运行” 按钮
                        Run('cmd /c'&GUICtrlRead($input1))
                        ;RunWait(@ComSpec&" /c "&GUICtrlRead($Input1)) ;参数  /c 表示要执行后面的“命令字符串”,而字符串是来自控件$input1内的内容
                        ;问题2:输入 msconfig 怎么不执行呢?
                        ;答:笨蛋!它不在/system32目录下,必须输入绝对路径才能执行,要不然再修改Path把msconfig所在的目录也加上
                        ;问题3:如何执行tasklist后让出现的窗口定住呢?Run('cmd /c pause')只是又打开一个DOS的暂停窗口啊?
                        ;答:其实在$input1内输入“tasklist & pause"就实现了,不过这还是DOS啊!
                        ;cmd /V:ON  启用“延迟变量”的意思!
        EndSwitch
WEnd
示例2:事件模式响应版 Switch @GUI_CtrlID
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
#AutoIt3Wrapper_Run_Tidy=y
#Obfuscator_Parameters=/striponly
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
;######密码版的系统工具####################
;问题1:为什么不加While循环,界面会一闪而过?---感谢水木子
;答:如果不加While循环,代码一直执行到完毕,界面肯定一闪而过,
;    并且水木子老师建议不要sleep(1),那样延迟时间短执行过快CPU会受不了的!这都是经验啊!

;进行密码验证
_CheckPassWords()

Opt("GUIOnEventMode", 1) ;采用事件模式响应
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=

$Form1 = GUICreate("系统工具集 ", 631, 454, 192, 114)
$Group1 = GUICtrlCreateGroup(".exe类", 48, 32, 169, 305)
$Button2 = GUICtrlCreateButton("Windows更新程序", 64, 56, 137, 33)
$Button3 = GUICtrlCreateButton("远程桌面", 64, 96, 137, 33)
$Button4 = GUICtrlCreateButton("系统信息", 64, 136, 137, 33)
$Button5 = GUICtrlCreateButton("文件签名验证程序", 64, 176, 137, 33)
$Button6 = GUICtrlCreateButton("任务管理器", 64, 216, 137, 33)
$Button7 = GUICtrlCreateButton("系统配置实用程序", 64, 256, 137, 33)
$Button8 = GUICtrlCreateButton("磁盘垃圾清理", 64, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(".msc类", 232, 32, 169, 305)
$Button9 = GUICtrlCreateButton("本地服务设置", 248, 56, 137, 33)
$Button10 = GUICtrlCreateButton("共享文件夹管理器", 248, 96, 137, 33)
$Button11 = GUICtrlCreateButton("磁盘碎片整理", 248, 136, 137, 33)
$Button12 = GUICtrlCreateButton("计算机管理", 248, 176, 137, 33)
$Button13 = GUICtrlCreateButton("磁盘管理", 248, 216, 137, 33)
$Button14 = GUICtrlCreateButton("本地安全设置", 248, 256, 137, 33)
$Button15 = GUICtrlCreateButton("设备管理器", 248, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup(".cpl类(控制面板)", 416, 32, 169, 305)
$Button16 = GUICtrlCreateButton("系统属性", 432, 56, 137, 33)
$Button17 = GUICtrlCreateButton("用户帐户", 432, 96, 137, 33)
$Button18 = GUICtrlCreateButton("自动更新", 432, 136, 137, 33)
$Button19 = GUICtrlCreateButton("网络连接", 432, 176, 137, 33)
$Button20 = GUICtrlCreateButton("区域和语言选项", 432, 216, 137, 33)
$Button21 = GUICtrlCreateButton("添加/删除程序", 432, 256, 137, 33)
$Button22 = GUICtrlCreateButton("Internet属性", 432, 296, 137, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("以上工具也可通过运行执行", 48, 352, 537, 65)
$Input1 = GUICtrlCreateInput("", 64, 376, 337, 21)
$Button1 = GUICtrlCreateButton("运行", 416, 368, 105, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("感谢hynq2000!仅为练手使用---采十青青橄榄  2010.4.27", 216, 424, 320, 66)
$Group5 = GUICtrlCreateGroup("", 32, 20, 569, 455)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

;###########进行事件关联##############
GUISetOnEvent($gui_event_close, "_Exit") ;错误:将  $ 写成 @
GUICtrlSetOnEvent($Button2, "_SysTools") ;点击$Button2,函数_SysTools响应,注意,不需要书写_SysTools(),而且要用" "将函数括起来
GUICtrlSetOnEvent($Button3, "_SysTools") ;另外注意是GUICtrlSetOnEvent(),不是GUISetOnEvent(),人家可是控件啊 !
GUICtrlSetOnEvent($Button4, "_SysTools")
GUICtrlSetOnEvent($Button5, "_SysTools")
GUICtrlSetOnEvent($Button6, "_SysTools")
GUICtrlSetOnEvent($Button7, "_SysTools")
GUICtrlSetOnEvent($Button8, "_SysTools")
GUICtrlSetOnEvent($Button9, "_SysTools")
GUICtrlSetOnEvent($Button10, "_SysTools")
GUICtrlSetOnEvent($Button11, "_SysTools")
GUICtrlSetOnEvent($Button12, "_SysTools")
GUICtrlSetOnEvent($Button13, "_SysTools")
GUICtrlSetOnEvent($Button14, "_SysTools")
GUICtrlSetOnEvent($Button15, "_SysTools")
GUICtrlSetOnEvent($Button16, "_SysTools")
GUICtrlSetOnEvent($Button17, "_SysTools")
GUICtrlSetOnEvent($Button18, "_SysTools")
GUICtrlSetOnEvent($Button19, "_SysTools")
GUICtrlSetOnEvent($Button20, "_SysTools")
GUICtrlSetOnEvent($Button21, "_SysTools")
GUICtrlSetOnEvent($Button22, "_SysTools")
GUICtrlSetOnEvent($Button1, "_SysTools")
;###########事件关联完毕##############

;###########进入##############
;注意:没有这个循环,界面是一闪而过
While 1
        Sleep(250)
WEnd
;###########主循环完毕##############

;###########定义响应事件的函数##############
Func _SysTools()
        Switch @GUI_CtrlId ;这是事件模式,别忘了消息模式是 Switch @GUIGetMsg()
                Case $Button2 ;开始执行系统的exe文件,一般它们都在  \system32目录下
                        Run(@SystemDir & "\wupdmgr.exe")
                Case $Button3
                        Run(@SystemDir & "\mstsc.exe")
                Case $Button4
                        Run(@SystemDir & "\winmsd.exe")
                Case $Button5
                        Run(@SystemDir & "\sigverif.exe")
                Case $Button6
                        Run(@SystemDir & "\taskmgr.exe")
                Case $Button7
                        Run(@WindowsDir & "\pchealth\helpctr\binaries\Msconfig.exe") ;msconfig命令不在\system32目录下
                        ;Run(@SystemDir&"\tsshutdn.exe") 它是60秒倒计时关机命令
                Case $Button8
                        Run(@SystemDir & "\cleanmgr.exe")
                Case $Button9 ;开始执行系统的msc文件,一般它们都在  \system32目录下,通过shellexecute执行它们
                        ShellExecute(@SystemDir & "\services.msc")
                Case $Button10
                        ShellExecute(@SystemDir & "\fsmgmt.msc")
                Case $Button11
                        ShellExecute(@SystemDir & "\dfrg.msc")
                Case $Button12
                        ShellExecute(@SystemDir & "\compmgmt.msc")
                Case $Button13
                        ShellExecute(@SystemDir & "\diskmgmt.msc")
                Case $Button14
                        ShellExecute(@SystemDir & "\secpol.msc")
                Case $Button15
                        ShellExecute(@SystemDir & "\devmgmt.msc")
                Case $Button16 ;开始执行系统的cpl文件,一般它们都在  \system32目录下,通过control来执行.cpl文件
                        Run("control sysdm.cpl")
                Case $Button17
                        Run("control userpasswords2")
                        ;Run("control nusrmgr.cpl"),不知道为什么它不好使!
                Case $Button18
                        Run("control wuaucpl.cpl")
                Case $Button19
                        Run("control ncpa.cpl")
                Case $Button20
                        Run("control intl.cpl")
                Case $Button21
                        Run("control appwiz.cpl")
                Case $Button22
                        Run("control inetcpl.cpl")
                Case $Button1 ;执行 “运行” 按钮
                        Run('cmd /c' & GUICtrlRead($Input1)) ;刚开始,$Button1就是没有反映,原来是忘记将其进行事件关联了
                        ;RunWait(@ComSpec&" /c "&GUICtrlRead($Input1)) ;参数  /c 表示要执行后面的“命令字符串”,而字符串是来自控件$input1内的内容
                        ;问题2:输入 msconfig 怎么不执行呢?
                        ;答:笨蛋!它不在/system32目录下,必须输入绝对路径才能执行,要不然再修改Path把msconfig所在的目录也加上
                        ;问题3:如何执行tasklist后让出现的窗口定住呢?Run('cmd /c pause')只是又打开一个DOS的暂停窗口啊?
                        ;答:其实在$input1内输入“tasklist & pause"就实现了,不过这还是DOS啊!
                        ;cmd /V:ON  启用“延迟变量”的意思!
        EndSwitch
EndFunc   ;==>_SysTools
;###########响应事件的函数结束##############

;###########定义验证密码的函数##############
Func _CheckPassWords()
        Local $MyPassWords = "MynameisZGK"
        $InputPassWords = InputBox("密码验证", "请输入密码:", "", "*", 200, 100, @DesktopWidth - 600, @DesktopHeight - 450, 20)
        ;InputBox("标题","提示","默认内容","密码字符","宽","高","左窗口距离","上窗口距离","密码输入延迟时间")
        ;*就是让输入的密码字符以星号显示
        ;@DesktopWidth-600,@DesktopHeight-450,就是让密码输入框居中显示
        If @error = 0 Then ;@error=0表示返回的字符串有效
                If $InputPassWords <> $MyPassWords Then
                        MsgBox(262144 + 32, "真遗憾!!!", "密码错了,想不起来了?", 9)
                        _Exit()
                Else ;密码检查通过
                        $InputPassWords = "" ;进入工具操作界面并清空输入的密码
                EndIf
        ElseIf @error = 1 Then ;@error=1表示用户按了Cancel按钮
                MsgBox(262144 + 32, "", "用户按了取消按钮")
                _Exit()
        ElseIf @error = 2 Then ;@error=2表示输入超时
                MsgBox(262144 + 32, "真遗憾!!!", "输入口令时间超时", 9)
                _Exit()
        ElseIf @error = 3 Then ;输入框显示失败,这通常是由参数失效引起
                MsgBox(262144 + 16, "意外错误!!!", "口令输入框显示失败!请重试!", 9)
                _Exit()
        Else
                _Exit()
        EndIf
EndFunc   ;==>_CheckPassWords
;###########严整密码函数结束##############

Func _Exit()
        Exit
EndFunc   ;==>_Exit
3.

评分

参与人数 1贡献 +2 收起 理由
lixiaolong + 2 好!

查看全部评分

发表于 2012-3-8 09:09:01 | 显示全部楼层
支持楼主共享精神。
发表于 2012-3-8 11:09:15 | 显示全部楼层
好久没看见你了,向你学习!!
发表于 2014-12-24 16:05:47 | 显示全部楼层
非常好的资料,用的上
发表于 2015-1-9 11:55:52 | 显示全部楼层
非常好的资料    支持楼主共享精神 已收藏
发表于 2015-1-21 19:18:26 | 显示全部楼层
不好使是因为你打错了lusrmgr.msc  是l开头的
发表于 2018-2-24 19:21:30 | 显示全部楼层
感谢楼主分享,感觉还不错
发表于 2018-3-16 00:28:01 | 显示全部楼层
支持楼主共享精神。
发表于 2018-5-30 14:20:05 | 显示全部楼层
支持共享 很好的资料
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 16:34 , Processed in 0.086772 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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