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



在线中文文档:https://www.autoitx.com/Doc/
打开AutoIt提供的窗口信息提取工具

将Finder Tool的定位光标拖拽到窗口中的某控件上,获取窗口及控件相关信息


双击.au3文件运行脚本


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

;定义变量
$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
;单行注释以";" 开头
Local $name = "张三"
#cs
多行注释:以 "#cs" 开头,以 "#ce" 结束,或者以 "#comments-start" 开头,以 "#comments-end" 结束。
#ce
Func fn()
MsgBox(0, "标题", "文本内容")
EndFunc
If 2>1 And 3>2 Then
...
ElseIf 4>3 Or 5>4 Then
...
Else
...
EndIf
Local $name = "张三"
Switch $name
Case "张三"
...
Case "李四"
...
Case Else
...
EndSwitch
Local $i = 1
Select
Case $i = 1
...
Case $i = 2
...
Case Else
...
EndSelect
Local $sum1 = 0
For $i=0 To 10
$sum1 += $i
Next
Local $sum2 = 0
For $i=0 To 10 Step 2
$sum1 += $i
Next
Local $i = 0
While True
$i += 1
If $i=4 Then
ContinueLoop
ElseIf $i > 10 Then
ExitLoop
EndIf
Tooltip($i)
Sleep(500)
WEnd
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
;拼接字符串
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 <StringConstants.au3>
Local $arr = StringSplit("1233,ab,3", ",", $STR_NOCOUNT)
;更多操作可以使用内置的String.au3模块
#include <String.au3>
;获取数组中的某个值
Local $arr[2] = [1, 2]
Local $sum = $arr[0] + $arr[2]
;返回数组的长度或map中键的数量
Local $arr[] = [1, 2, 3]
UBound($arr)
;初始化数组时有个很大的坑,虽然写的空数组,但是里面却默认有一个空字符串元素,所以要特别注意这点
#include <Array.au3>
Local $arr[] = []
MsgBox(0, "", UBound($arr)) ;会显示1
;更多操作可以使用内置的Array.au3模块
#include <Array.au3>
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
@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)
;Array.au3为内置模块
#include <Array.au3>
;导入自己编写的au3文件模块
#include "C:\Users\ke\Desktop\autoClickSelect.au3"
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)
#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
#include<Misc.au3>
While 1
Local $pos = MouseGetPos()
;当鼠标左键被按下时
If _isPressed("01") Then
ToolTip("鼠标的x轴为:" & $pos[0] & ",鼠标的y轴为:" & $pos[1], Default, Default)
Sleep(200)
EndIf
WEnd
;获取窗口句柄
Local $hWnd = WinGetHandle("[class:#32770]")
;隐藏运行窗口
WinSetState($hWnd, "", @SW_HIDE)
Sleep(2000)
;显示运行窗口
WinSetState($hWnd, "", @SW_SHOW)
;写入一个字符串并以换行符结尾
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)
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)
;设置快捷键Ctrl+p,按下后执行stop函数
HotKeySet("^p", "stop")
Sleep(120000)
WEnd
Func stop()
MsgBox(0, "提示", "程序已结束")
Exit
EndFunc
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")
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")
#cs
=======================定时关机精灵=======================
#ce
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Date.au3>
#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
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
(本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展 是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。 如:有三个人,每个人做的不同的事物,但是是需要协作的完成。 而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定