全网最全AutoIt3基础教程及实战案例 您所在的位置:网站首页 26个英文字母表a4纸 全网最全AutoIt3基础教程及实战案例

全网最全AutoIt3基础教程及实战案例

2024-03-04 02:10| 来源: 网络整理| 查看: 265

一、简介

AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务,而这是其它语言不可能做到或无可靠方法实现的,比如,我们在使用selenium做自动化测试web应用时,就会遇到一个问题就是,当使用selenium自动化点击了网页中上传文件的按钮后,弹出一个选择文件的弹框,由于这个弹框是属于操作系统的而非浏览器,selenium程序就无法进行后续的操作了,这时侯就我们就可以使用AutoIt编写自动化脚本,来执行后续的自动选择文件的操作。

二、安装及使用 1. 安装

AutoIt官网:https://www.autoitscript.com/site/autoit/

AutoIt下载地址:https://www.autoitscript.com/site/autoit/downloads/

安装完成后打开AutoIt v3所在的文件夹

2. 查看API手册

在线中文文档:https://www.autoitx.com/Doc/

3. 提取窗口信息

打开AutoIt提供的窗口信息提取工具 将Finder Tool的定位光标拖拽到窗口中的某控件上,获取窗口及控件相关信息

4. 编写脚本

5. 运行脚本

双击.au3文件运行脚本

6. 导出exe文件

选择demo.au3文件,点击Convert按钮生成demo.exe文件

三、开发基础 1. 定义变量 定义变量(必须以"$"符号开头,默认为全局变量) ;定义变量 $a, $b, $c $a = 1 $b = 2 $c = $a + $b ;定义字符串 $name = "张三" ;定义布尔值 $bool1 = True $bool2 = False ;定义数组 $arr[2] = ["react", "vue"] $arr[] = ["text", True, 5] ;定义函数 Func getName() Local $name = "李四" Return $name EndFunc 局部变量(函数内定义的,函数外无法获取) Local $name = "张三" Local $arr[2] = ["react", "vue"] 全局变量(函数内定义的,函数外可以获取) Global $name = "张三" Global $arr[2] = ["react", "vue"] 常量(不可被重新赋值) Const $pi = 3.1415926 2. 添加注释 ;单行注释以";" 开头 Local $name = "张三" #cs 多行注释:以 "#cs" 开头,以 "#ce" 结束,或者以 "#comments-start" 开头,以 "#comments-end" 结束。 #ce Func fn() MsgBox(0, "标题", "文本内容") EndFunc 3. 条件判断 If判断 If 2>1 And 3>2 Then ... ElseIf 4>3 Or 5>4 Then ... Else ... EndIf Switch判断 Local $name = "张三" Switch $name Case "张三" ... Case "李四" ... Case Else ... EndSwitch Select判断 Local $i = 1 Select Case $i = 1 ... Case $i = 2 ... Case Else ... EndSelect 4. 循环体 简单For循环 Local $sum1 = 0 For $i=0 To 10 $sum1 += $i Next Step 2表示每次循环结束后执行$i += 2, 如果是Step -2, 则每次循环结束后执行$i -= 2 Local $sum2 = 0 For $i=0 To 10 Step 2 $sum1 += $i Next While循环 Local $i = 0 While True $i += 1 If $i=4 Then ContinueLoop ElseIf $i > 10 Then ExitLoop EndIf Tooltip($i) Sleep(500) WEnd Do循环 Local $i = 0 Local $i = 0 Do Tooltip($i) Sleep(500) $i += 1 Until $i>3 遍历数组 Local $arr[2] = [1, 2] Local $sum3 = 0 For $i In $arr $sum3 += $i Next 5. 操作字符串 ;拼接字符串 Local $a = "Hello" Local $b = "World" Local $c = $a & $b ;返回字符串中从左开始指定数量的字符 StringLeft("123456", 3) ;返回字符串中从右开始指定数量的字符 StringRight("123456", 3) #cs 截取字符串的部分字符 第一个参数为要操作的字符串 第二个参数为截取开始的第几个字符数 第三个参数为要截取的字符个数 #ce Local $newStr = StringMid("123456", 3, 2) ;删除字符串中从左开始指定数量的字符 Local $newStr = StringTrimLeft("123456", 3) ;删除字符串中从右开始指定数量的字符 Local $newStr = StringTrimRight("123456", 3) #cs 字符串替换 第一个参数为要操作的字符串 第二个参数为要替换的字符串 第三个参数为要替换成的目标字符串 第四个参数为替换的次数,默认为0,全部替换 第五个参数为标志,是否区分大小写,默认为0,不区分大小写,1则区分大小写,2也不区分大小写,使用基本/更快的比较方式 返回值为新字符串 #ce Local $newStr = StringReplace("ab3ab3ab3", "ab", "12", 3) #cs 根据给定的分隔符将字符串拆分为子字符串 第一个参数为要操作的字符串 第二个参数为用作分隔符的一个或多个字符 第三个参数略 返回值为数组 #ce #include Local $arr = StringSplit("1233,ab,3", ",", $STR_NOCOUNT) ;更多操作可以使用内置的String.au3模块 #include 6. 操作数组 ;获取数组中的某个值 Local $arr[2] = [1, 2] Local $sum = $arr[0] + $arr[2] ;返回数组的长度或map中键的数量 Local $arr[] = [1, 2, 3] UBound($arr) ;初始化数组时有个很大的坑,虽然写的空数组,但是里面却默认有一个空字符串元素,所以要特别注意这点 #include Local $arr[] = [] MsgBox(0, "", UBound($arr)) ;会显示1 ;更多操作可以使用内置的Array.au3模块 #include 7. 常用函数 暂停脚本执行 Sleep(2000) 生成随机数 #cs 第一个参数为随机数的最小值 第二个参数为随机数的最大值 第三个参数如果设为1,则返回整数 #ce Local $num = Random(1, 1000, 1) 判断值类型 Local $i = 1 ;是否是个数值 Local $isNumber = IsNumber($i) ;是否是个整数 Local $isInt = IsInt($i) ;是否是个字符串 Local $isString = IsString($i) ;是否是个布尔值 Local $isBool = IsBool($i) 鼠标移动操作 #cs 第一个参数为鼠标移动到的x轴位置 第二个参数为鼠标移动到的y轴位置 第三个参数为鼠标移动的速度 #ce MouseMove(500, 300, 20) 鼠标点击操作 #cs 第一个参数的枚举值有"left"、"right", 表示模拟点击鼠标的左键或右键 第二个参数为鼠标点击的x轴位置 第三个参数为鼠标点击的y轴位置 第四个参数为鼠标点击的次数,默认为1 第五个参数为鼠标点击的速度 #ce MouseClick("left", 500, 300, 2, 20) 向指定控件发送鼠标点击命令 #cs 第一个参数为窗口标题 第二个参数为窗口文本 第三个参数为控件ID 第四个参数为点击鼠标的左键、右键或其他 第五个参数为鼠标点击的次数,默认为1 第六个参数为点击鼠标相对于控件的x轴的位置,默认为中间 第七个参数为点击鼠标相对于控件的y轴的位置,默认为中间 #ce ControlClick("winTitle", "winContent", "Button1", "right", 2) 暂停脚本的执行直至指定窗口存在(出现)为止 #cs 第一个参数为窗口标题 第二个参数为窗口文本 第三个参数为超时时间 #ce WinWait ( "winTitle" , "winContent" , 2000) 聚焦到指定活动窗口 #cs 第一个参数为窗口标题 第二个参数为窗口文本,选填 返回值为聚焦的窗口句柄,如果失败则返回0 #ce Local $window = WinActivate ( "winTitle", "winContent") 设置输入焦点到指定窗口的指定控件上 #cs 第一个参数为窗口标题 第二个参数为窗口文本 第三个参数为控件ID #ce ControlFocus("winTitle", "winContent", "Edit1") 向当前激活窗口发出模拟键盘操作 #cs 选中桌面上的Chrome图标(前提是脚本文件放到桌面执行) 第一个参数为按键名 第二个参数为标志,默认为0,特殊字符会生效,如果是1,则特殊字符不生效,作为普通字符 #ce Local $result = Send("Google Chrome", 1) ;模拟按下Window+r键 Send("#r") ;模拟按下CTRL+c键 Send("^c") ;模拟按下ALT+SPACE键 Send("!{SPACE}") ;模拟按下ALT+SHIFT+a键 Send("!+a") ;模拟连续按下DOWN键3次 Send("{DOWN 3}") ;选中某个复选框 Send("{+}") ;取消选中某个复选框 Send("{-}") 向指定窗口的指定控件发出模拟键盘操作 #cs 第一个参数为窗口标题 第二个参数为窗口内容 第三个参数为控件ID 第四个参数为模拟键盘输入的内容 第五个参数为标志,默认为0,特殊字符会生效,如果是1,则特殊字符不生效,作为普通字符 返回值为1表示成功,0表示失败 #ce Local $result = ControlSend("winTitle", "winContent", "Edit1", "键盘输入的内容", 1) 修改指定窗口下的指定控件的文本(除了输入框中文本,按钮上的文本也可修改) #cs 第一个参数为窗口标题 第二个参数为窗口文本 第三个参数为控件ID 第四个参数为修改的新文本 第五个参数为标志,默认为0,特殊字符会生效,如果是1,则特殊字符不生效,作为普通字符 返回值为1表示成功,0表示失败 #ce Local $result = ControlSetText("winTitle", "winContent", "Edit1", "新文本", 1) 打开并运行系统中的软件应用 ;打开计算器 Run("calc") ;打开记事本 Run("notepad") ;打开画图工具 Run("mspaint") ;打开Chrome浏览器 Run("C:\Program Files\Google\Chrome\Application\chrome.exe") ;暂停脚本,直至Chrome浏览器打开 RunWait("C:\Program Files\Google\Chrome\Application\chrome.exe") ToolTip("浏览器已打开") Sleep(2000) 自定义快捷键操作 While True ToolTip("这里一直显示,按Esc键可退出") #cs 第一个参数为快捷键的键值 第二个参数为触发后的回调函数名 返回值为1表示成功,0表示失败 #ce HotKeySet("{esc}", "stopRun") WEnd Func stopRun() MsgBox(0, "", "程序结束") Exit EndFunc 8. 常用宏命令(一种特殊的内置变量) 系统相关 @DesktopWidth 桌面宽度 @DesktopHeight 桌面高度 @UserName 系统当前登录的用户名称 @IPAddress1 第一块网卡的IP地址。在某些计算机上倾向于返回127.0.0.1 文件路径相关 @DesktopDir 系统当前用户的桌面的绝对路径 @AppDataDir 系统当前用户的应用程序数据文件夹的绝对路径(WinXp为"Application Data"文件夹路径,win7/8为"Roaming"文件夹路径) @LocalAppDataDir 系统当前用户的"Application Data"文件夹路径 @ScriptDir 脚本所在目录(不包括反斜杠"\") @ScriptName 当前运行脚本的长文件名 时间相关 @YEAR 当前年份(4位数) @MON 当前月份(01到12) @MADY 当前月的当前天数(01到31) @HOUR 当前小时值(00到23) @MIN 当前时钟的分钟值(00到59) @SEC 当前时钟的秒值(00到59) @MSEC 当前时钟的毫秒值(000到999) @YDAY 当天属该年的第几天(001到366, 如果不是闰年则001到365) 9. 调用外部au3模块 ;Array.au3为内置模块 #include ;导入自己编写的au3文件模块 #include "C:\Users\ke\Desktop\autoClickSelect.au3" 四、实战案例 1. 浮框显示简单的文字 ToolTip("显示的文字") ;使浮框持续显示2秒 Sleep(2000) ;第二个参数为x坐标,第三个参数为y坐标 ToolTip("显示的文字", 500, 300) Sleep(2000) ;Default为自动跟随鼠标位置 ToolTip("显示的文字", Default, Default) Sleep(2000) ;第四个参数为标题,第五个参数为显示的图标,1-7为7个不同的图标,默认为0不显示 ToolTip("显示的文字", Default, Default, "标题", 1) Sleep(2000) 2. 弹出框 #cs 第一个参数为标志,默认为0,显示简单的弹框,,如果是1,则显示确认弹框 第二个参数为弹框标题 第三个参数为文本内容 第四个参数为弹框显示的超时时间,默认为0,不自动关闭,单位秒 第五个参数为用作此对话框父级的窗口句柄 返回值为用户点击的按钮ID #ce MsgBox(0, "标题", "内容文字") MsgBox(0, "标题", "一秒后自动关闭", 1) Local $btnId =MsgBox(1, "提示", "是否确定删除?") If $btnId = 1 Then MsgBox(0, "结果", "点击了确定") ElseIf $btnId = 2 Then MsgBox(0, "结果", "点击了取消") EndIf 3. 显示鼠标点击位置 #include While 1 Local $pos = MouseGetPos() ;当鼠标左键被按下时 If _isPressed("01") Then ToolTip("鼠标的x轴为:" & $pos[0] & ",鼠标的y轴为:" & $pos[1], Default, Default) Sleep(200) EndIf WEnd 4. 操作窗口 ;获取窗口句柄 Local $hWnd = WinGetHandle("[class:#32770]") ;隐藏运行窗口 WinSetState($hWnd, "", @SW_HIDE) Sleep(2000) ;显示运行窗口 WinSetState($hWnd, "", @SW_SHOW) 5. 读写文本文件 ;写入一个字符串并以换行符结尾 FileWriteLine(@DesktopDir & "\test.txt", "第一行文本") ;紧接着文本原来的数据写入"test" FileWrite(@DesktopDir & "\test.txt", "test" & @LF) ;读取文件中的前6个字节数据(一个中文为3个字节) Local $val1 = FileRead(@DesktopDir & "\test.txt", 6) ;读取文件中第二行的文本 Local $val2 = FileReadLine(@DesktopDir & "\test.txt", 2) MsgBox(0, "", "前6个字节为:" & $val1 & @LF & "第二行文本为:" & $val2) 6. 防休眠小程序(每50秒自动移动鼠标1个像素,按Ctrl+e键结束程序) ;设置快捷键Ctrl+e,按下后执行stop函数 HotKeySet("^e", "stop") While True ;获取当前鼠标位置 Local $pos = MouseGetPos() Local $newX = $pos[0] Local $newY = $pos[1] ;让鼠标的x和y往屏幕的中心点移动 If $pos[0] >= @DesktopWidth / 2 Then $newX -= 1 Else $newX += 1 EndIf If $pos[1] >= @DesktopHeight / 2 Then $newY -= 1 Else $newY += 1 EndIf MouseMove($newX, $newY) Sleep(50000) WEnd Func stop() MsgBox(0, "提示", "程序已结束") Exit EndFunc 7. 设置默认浏览器 设置Chrome为默认浏览器 RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice", "ProgId", "REG_SZ", "ChromeHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice", "ProgId", "REG_SZ", "ChromeHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice", "ProgId", "REG_SZ", "ChromeHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice", "ProgId", "REG_SZ", "ChromeHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice", "ProgId", "REG_SZ", "ChromeHTML") 设置Firefox为默认浏览器 RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice", "ProgId", "REG_SZ", "FirefoxHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice", "ProgId", "REG_SZ", "FirefoxHTML") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoice", "ProgId", "REG_SZ", "FirefoxURL") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice", "ProgId", "REG_SZ", "FirefoxURL") RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice", "ProgId", "REG_SZ", "FirefoxURL") 8. 定时关机精灵 #cs =======================定时关机精灵======================= #ce #include #include #include #include #include #include #include #cs 修改AutoIt的通知栏全局设置 #ce Opt("TrayMenuMode", 1 + 2) Opt("TrayAutoPause", 0) ;点击图标时,脚本不暂停 ;创建快捷键,按下Ctrl+Alt+向下箭头则退出程序 HotKeySet("^!{DOWN}", "_HotKey") #cs 创建GUI视图界面 #ce Global $Form = GUICreate("定时关机精灵1.0", 308, 280, 192, 114) Const $shutdownOptionsWidth = 290 ;关机选项模块的宽 Const $shutdownOptionsHeight = 97 ;关机选项模块的高 Global $Group1 = GUICtrlCreateGroup("定时关机选项", 8, 8, $shutdownOptionsWidth, $shutdownOptionsHeight) Global $Label1 = GUICtrlCreateLabel("系统将在每天", 20, 32, 76, 17) Global $Combo1 = GUICtrlCreateCombo("", 93, 27, 40, 17) Global $Label2 = GUICtrlCreateLabel("时", 137, 32, 16, 17) Global $Combo2 = GUICtrlCreateCombo("", 153, 27, 40, 17) Global $Labe13 = GUICtrlCreateLabel("分执行下列操作", 200, 32, 88, 17) Global $Radio1 = GUICtrlCreateRadio("关机", 24, 70, 49, 17) Global $Radio2 = GUICtrlCreateRadio("重启", 96, 70, 57, 17) Global $Radio3 = GUICtrlCreateRadio("注销", 160, 70, 49, 17) Global $Radio4 = GUICtrlCreateRadio("锁定", 224, 70, 49, 17) Const $advancedOptionsWidth = 290 ;高级选项模块的宽 Const $advancedOptionsHeight = 121 ;高级选项模块的高 Const $advancedOptionsStartY = $shutdownOptionsHeight + 20 ;高级选项模块开始的Y轴位置 Global $Group3 = GUICtrlCreateGroup("高级选项", 8, $advancedOptionsStartY, $advancedOptionsWidth, $advancedOptionsHeight) Global $Checkbox1 = GUICtrlCreateCheckbox("启用自我保护,设置密码", 16, $advancedOptionsStartY + 20, 153, 17, $BS_AUTOCHECKBOX) Global $Input = GUICtrlCreateInput("", 173, $advancedOptionsStartY + 20, 80, 17, $ES_PASSWORD) Global $Checkbox2 = GUICtrlCreateCheckbox("程序运行时禁止修改系统时间。", 16, $advancedOptionsStartY + 42, 185, 17, $BS_AUTOCHECKBOX) Global $Checkbox3 = GUICtrlCreateCheckbox("每天8:30分自动与授时服务器校准时间。", 16, $advancedOptionsStartY + 64, 249, 17, $BS_AUTOCHECKBOX) Global $Checkbox4 = GUICtrlCreateCheckbox("当同时按下ctr1+a1t+UP键时,系统瞬间重启。", 16, $advancedOptionsStartY + 86, 257, 17, $BS_AUTOCHECKBOX) Global $Button1 = GUICtrlCreateButton("确定", 220, $advancedOptionsStartY + $advancedOptionsHeight + 10, 73, 25) #cs 创建程序右键菜单 #ce Global $ts1 = TrayCreateItem("程序设置") TrayCreateItem("") Global $ts2 = TrayCreateItem("系统休眠") Global $ts3 = TrayCreateItem("注销当前用户") Global $ts4 = TrayCreateItem("系统重启") Global $ts5 = TrayCreateItem("关闭系统") TrayCreateItem("") Global $ts0 = TrayCreateItem("退出程序") #cs 创建用于选择时间的下拉框选项的两个常量 #ce Const $set1 = "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|00" Const $set2 = "00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59" ;程序写入注册表,开机自启动 RegWrite("HKLM\SOFTWARE\Microsoft\Windows\Currentversion\Run", "定时强制关机精灵", "REG_SZ", @ScriptFullPath) Global $hour,$minute,$pwd Global $type,$nettime,$hide,$lctime,$hotkey _main() Exit #cs 以下是自定义的函数 #ce ;主入口函数 Func _main() _inird() GUICtrlSetData($Combo1, $set1, $hour) GUICtrlSetData($Combo2, $set2, $minute) While 1 If Number($hour) = @HOUR And Number($minute) = @MIN Then ExitLoop Local $_ts = TrayGetMsg() ;响应用户在右键菜单中的点击操作 Switch $_ts Case $ts0 _pdcheck("E") Case $ts1 _pdcheck("F") Case $ts2 ;休眠 _shutdown(5) Case $ts3 ;注销 _shutdown(3) Case $ts4 ;重启 _shutdown(2) Case $ts5 ;关机 _shutdown(1) EndSwitch WEnd ;退出循环则表示到了设置的时间,执行关机、重启等操作 _shutdown($type) EndFunc ;执行关机、重启等操作 Func _shutdown($type) For $step = 3 To 1 Step -1 TrayTip("警告", $step & "正在执行操作...", 0, 1) Sleep(1000) Next TrayTip("", "", 0) Switch $type Case 1 ;关机 Shutdown(1 + 4 + 8) Case 2 ;重启 Shutdown(2 + 4) Case 3 ;注销 Shutdown(0) Case 4 ;锁定 Send("#L") Case 5 ;休眠 Shutdown(64) EndSwitch Exit EndFunc Func _form() GUISetState(@SW_SHOW, $Form) While 1 Local $idMsg = GUIGetMsg() Local $gur1 = GUICtrlRead($Checkbox1) Local $gur2 = GUICtrlRead($Checkbox2) Local $gur3 = GUICtrlRead($Checkbox3) Local $gur4 = GUICtrlRead($Checkbox4) Switch $idMsg Case $Button1 ExitLoop Case $Radio1 $type = "1" Case $Radio2 $type = "2" Case $Radio3 $type = "3" Case $Radio4 $type = "4" Case $Checkbox1 If $gur1 = $GUI_CHECKED Then $hide = 1 GUICtrlSetstate($Input, $GUI_ENABLE) Else $hide = 0 GUICtrlSetState($Input, $GUI_DISABLE) EndIf Case $Checkbox2 If $gur2 = $GUI_CHECKED Then $lctime = 1 Else $lctime = 0 EndIf Case $Checkbox3 If $gur3 = $GUI_CHECKED Then $nettime = 1 Else $nettime =0 EndIf Case $Checkbox4 If $gur4 = $GUI_CHECKED Then $hotkey = 1 Else $hotkey = 0 EndIf Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE, $Form) _main() EndSwitch WEnd GUISetState(@SW_HIDE, $Form) _rfwin($type, $nettime, $hide, $lctime, $hotkey) _main() EndFunc ;将GUI的设置写入ini文件 Func _rfwin($type, $nettime, $hide, $lctime, $hotkey) Local $idMsg = GUIGetMsg() $hour = GUICtrlRead($Combo1) $minute = GUICtrlRead($Combo2) $pwd = GUICtrlRead($Input) Iniwrite(@ScriptDir & "\time.ini", "time", "hour", $hour) IniWrite(@ScriptDir & "\time.ini", "time", "minute", $minute) IniWrite(@ScriptDir & "\time.ini", "time", "type", $type) Iniwrite(@ScriptDir & "\time.ini", "config", "nettime", $nettime) Iniwrite(@ScriptDir & "\time.ini", "config", "hide", $hide) Iniwrite(@ScriptDir & "\time.ini", "config", "lctime", $lctime) Iniwrite(@ScriptDir & "\time.ini", "config", "hotkey", $hotkey) Iniwrite(@ScriptDir & "\time.ini", "config", "pwd", $pwd) EndFunc ;读取ini配置文件并表现在GUI上 Func _inird() ;将ini文件中的配置读取到变量中 $hour = IniRead(@ScriptDir & "\time.ini", "time","hour", "") $minute = IniRead(@ScriptDir & "\time.ini", "time", "minute", "") $type = IniRead(@ScriptDir & "\time.ini", "time", "type", "") $nettime = IniRead(@ScriptDir & "\time.ini", "config", "nettime", "") $hotkey = IniRead(@ScriptDir & "\time.ini", "config", "hotkey", "") $pwd = IniRead(@ScriptDir & "\time.ini", "config", "pwd", "") $hide = IniRead(@ScriptDir & "\time.ini", "config", "hide", "") $lctime = IniRead(@ScriptDir & "\time.ini", "config", "lctime", "") ;根据配置数据选中单选框 Switch $type Case 1 GUICtrlSetState($Radio1, $GUI CHECKED) Case 2 GUICtrlSetState($Radio2, $GUI_CHECKED) Case 3 GUICtrlSetState($Radio3, $GUI CHECKED) Case 4 GUICtrlSetState($Radio4, $GUI_CHECKED) EndSwitch If $nettime = 1 Then GUICtrlSetState($Checkbox3, $GUI_CHECKED) If $hotkey = 1 Then GUICtrlSetState($Checkbox4, $GUI_CHECKED) If $hide = 1 Then GUICtrlSetState($Checkbox1, $GUI_CHECKED) GUICtrlSetState($Input, $GUI_ENABLE) GUICtrlSetData($Input, $pwd) EndIf If $lctime = 1 Then GUICtrlsetstate($Checkbox2, $GUI_CHECKED) FileMove(@SystemDir & "\timedate.cpl", @ScriptDir & "\timedate.dll", 1) Else FileMove(@ScriptDir & "\timedate.dll", @SystemDir & "\timedate.cpl") EndIf Return EndFunc ;验证密码,实现退出或进入系统设置功能 Func _pdcheck($call) If $pwd "" And $hide = 1 Then Local $pdchk = GUICreate("验证密码", 240, 30) Local $idFile = GUICtrlCreateInput("", 10, 5, 150, 20, $ES_PASSWORD) GUICtrlSetState(-1, $GUI_DROPACCEPTED) Local $idBtn = GUICtrlCreateButton("Ok", 170, 5, 60, 20) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE) _main() Case $idBtn If $pwd == GUICtrlRead($idFile) Then ExitLoop Else MsgBox(4096, "错误", "验证失败") EndIf EndSwitch WEnd EndIf GUISetState(@SW_HIDE) If $call = "F" Then _form() ElseIf $CALL = "E" Then FileMove(@ScriptDir & "\timedate.dll", @SystemDir & "\timedate.cpl") ;删除注册表中添加的开机自启动 RegDelete("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "定时关机精灵") MsgBox(0, "", "成功退出程序") Exit EndIf EndFunc ;按下Ctrl+Alt+向下箭头按键后的回调函数 Func _HotKey() _pdcheck("E") EndFunc 五、实战总结 1. ControlSend和ControlSetText的区别 ControlSend是模拟键盘一个个字符进行输入;而ControlSetText相当于是将整个字符串直接粘贴进去ControlSend只对可输入的控件有作用;而ControlSetText可以操作其他控件,比如,可以修改按钮中的文字 2. 不能使用If Else判断一个数组存不存在,因为它总是会走Else,即使它不是空数组 3. 使用UBound()函数获取数组中元素个数时,空数组和有一个元素的数组都会返回1,可以使用If _ArrayToString($arr) Then来判断是空数组还是非空数组,但是这有个弊端就是,如果数组中是空字符串,那么就会走Else,这点注意一下就行 4. 如果想要学习AutoIt3更多知识或者想使用AutoIt3进行实战开发的,可以看我的另一篇文章,手把手带你使用AutoIt3开发一个完整项目。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有