喊话函数(喊话方式,喊话间隔=1000){ Gui,ts:Minimize Sleep,200 IniRead,喊话方式,喊话.ini,喊话设置,喊话方式,顺序 ;默认喊话方式为顺序 IniRead,喊话类型,喊话.ini,喊话设置,喊话类型,按键示例 ;默认为发送按键示例 IniRead,喊话类型,喊话.ini,喊话类型,%喊话类型%,0 ;默认喊话类型为0,防止未定义的喊话类型出现. IniRead,喊话间隔,喊话.ini,喊话设置,喊话间隔,1000 ;默认喊话间隔1秒. IniRead,数,喊话.ini,%喊话类型% StringSplit, 数量, 数, `n 数量0 -=1 i := 0 loop { if (喊话方式="随机") { Random, 随机数, 0,%数量0% IniRead,喊话内容,喊话.ini,%喊话类型%,%随机数% 延时发送(喊话内容) Sleep,%喊话间隔% } else { IniRead,喊话内容,喊话.ini,%喊话类型%,%i% 延时发送(喊话内容) i +=1 if ( i > 数量0) { i :=0 } Sleep,%喊话间隔% } } } 延时发送(源码,发送模式:="input"){ 起始位置 :=1 正则式:= "i)(.*?){Sleep *(d+)}" StringLen,源码长度,源码 loop { 匹配 := RegExMatch(源码, 正则式,匹配结果数组,起始位置) if (匹配==0) { break } ;分析并取得下次搜索的起始位置 StringLen,匹配长度,匹配结果数组 起始位置 :=匹配+匹配长度 ;测试发送效果 ;SendInput,%匹配结果数组1% 包含声音发送(匹配结果数组1) Sleep,%匹配结果数组2% } ;以下判断是否执行完所有按键代码,因为有些按键代码后面没有延时。上面的循环无法处理 剩余长度:=源码长度-起始位置+1 if (剩余长度 > 0) { StringRight,剩余按键,源码,%剩余长度% ;SendInput,%剩余按键% 包含声音发送(剩余按键) } } 包含声音发送(字符串,发送模式:="input"){ 起始位置 :=1 正则式:= "i)(.*?){SoundBeep[,| ]*(d*)[,| ]*(d*)}" StringLen,字符串长度,字符串 loop { 匹配 := RegExMatch(字符串, 正则式,匹配结果数组,起始位置) if (匹配==0) { break } ;分析并取得下次搜索的起始位置 StringLen,匹配长度,匹配结果数组 起始位置 :=匹配+匹配长度 ;测试发送效果 SendInput,%匹配结果数组1% if (匹配结果数组232767){ 匹配结果数组2:=32767 } if (匹配结果数组3=="") { 匹配结果数组3:=150 } SoundBeep,%匹配结果数组2%,%匹配结果数组3% } ;以下判断是否执行完所有按键代码,因为有些按键代码后面没有延时。上面的循环无法处理 剩余长度:=字符串长度-起始位置+1 if (剩余长度 > 0) { StringRight,剩余按键,字符串,%剩余长度% SendInput,%剩余按键% } } 更新界面(){ global gui,main:Default guicontrol,text,Edit_触发长按时间,%触发长按时间% guicontrol,text,Edit_按键有效间隔,%按键有效间隔% guicontrol,text,Edit_个人单击时长,%个人单击时长% guicontrol,text,Edit_鼠标划动误差,%鼠标划动误差% guicontrol,text,Edit_至少移动距离,%至少移动距离% guicontrol,,Edit_斜向微调系数,%斜向微调系数% guicontrol, ,Edit_两次按键间隔,%两次按键间隔% guicontrol, ,Edit_按键持续时间,%按键持续时间% guicontrol, ,Edit_鼠标点击延时,%鼠标点击延时% } 保存配置(){ } 界面事件处理(){ global ;调用全局变量。否则获取不到全局变量的值 ToolTip,% A_GuiEvent if (A_GuiControl="编辑配置" ) { run,notepad.exe 超级热键.ini }else if(A_guicontrol="打开帮助") { run,notepad.exe 超级热键使用说明.txt }else if(A_guicontrol="增加热键") { ;ToolTip, 工具待完善中`,欢迎批评指正 Gui,hGui:Submit,NoHide MsgBox, % "目前界面热键输入无法定义鼠标及win做前缀.如果需要请直接修改ini" 写入内容:="单击=" IniWrite,%写入内容%,超级热键.ini,%HKname% }else if(A_guicontrol="删除热键") { ToolTip, 工具待完善中`,欢迎批评指正 }else if(A_guicontrol="保存配置") { ToolTip, 工具待完善中`,欢迎批评指正 }else{ ToolTip, 工具待完善中`,欢迎批评指正 } } 菜单事件处理(){ } 托盘事件处理(){ if (A_ThisMenuItem="隐藏窗口"){ menu,tray,Rename,隐藏窗口,显示窗口 Gui, main:hide }else if (A_ThisMenuItem="显示窗口"){ menu,tray,Rename,显示窗口,隐藏窗口 gui,main:show }else if (A_ThisMenuItem="热键切换---Win+ESC"){ send,#{esc} }else if (A_ThisMenuItem="帮助关于"){ MsgBox,%shuoming% }else if (A_ThisMenuItem="退出脚本---ESC"){ ExitApp ;}else if (A_ThisMenuItem="显示窗口"){ }else{ } } 控制窗口(窗口标题,控制类型*){ if (控制类型[1]="show" or 控制类型[1]="显示"){ winshow,%窗口标题% }else if (控制类型[1]="hide" or 控制类型[1]="隐藏"){ winhide,%窗口标题% }else if (控制类型[1]="close" or 控制类型[1]="关闭"){ WinClose,%窗口标题% }else if (控制类型[1]="Transparent" or 控制类型[1]="透明度"){ winset,Transparent,% 控制类型[2],%窗口标题% }else if (控制类型[1]="TransColor" or 控制类型[1]="透明色"){ WinSet, TransColor, % 控制类型[2], %窗口标题% }else{ } } 读取热键列表(){ IniRead,热键列表,超级热键.ini, loop,Parse,热键列表,`n { if (A_loopfield!="帮助说明" && A_loopfield!="全局配置"){ 列表:=列表 "|" A_LoopField } } ;GuiControl, Sub-command, ControlID [, Param3] ;列表:=SubStr(列表,2) GuiControl,,hotkeylist ,%列表% } 命令选择列表更新(){ gui,hGui:default Gui, ListView, cmdlist commandlist:="send|send2|run|winset" ;LV_Add(Options, Field1, Field2,) ;LV_Modify(RowNumber, Options [, NewCol1, NewCol2, ...]) LV_ModifyCol(1, 60) ;指定第一列的宽度 LV_ModifyCol(2, 120) ;指定第二列的宽度 LV_ModifyCol(3, 120) ;指定第三列的宽度 LV_Modify(2, col1,"命令", "参数") LV_Insert(55, clo1 check, "发送按键", "{enter}") LV_Insert(55, clo1 check, "延时发送", "{enter}") LV_Insert(55, clo1 check, "运行程序", "{enter}") LV_Insert(55, clo1 check, "控制窗口", "{enter}") ;LV_Modifycol(1, "命令", "参数") }