CoordMode, mouse[,screen] 
  ;在脚本自动启动区域设置,会影响默认的全部线程以及子过程或者函数中涉及到鼠标获取值的默认设置。
  ;如果不设置,默认为活动窗口,screen表示针对屏幕

IniRead , ev_EXE , %g_config% , general , everythingexe ;对应的为变量value,ini文件,section区域,key键值
IniWrite, %str2%, %g_config%, general , % "taskbarmode" ;对应的为:写入的内容,ini文件,section区域,键值

;获取某窗口的控件id,哪怕是隐藏窗口或者隐藏控件都可以。
;获取窗口ahk_class Shell_TrayWnd中的MSTaskListWClass1控件的id(或者hwnd)值,存储于变量appintaskbarid中。
;注意hwnd后面为两个逗号
ControlGet, appintaskbarid, hwnd,, MSTaskListWClass1, ahk_class Shell_TrayWnd

;获取控件位置大小参数
;cx1,cy1,cw1,ch1四个为控件TrayClockWClass1在ahk_class Shell_TrayWnd窗口的位置(相对于该窗口)
;其中控件为名称,例如static1,edit1这样的。
ControlGetPos, cx1,cy1,cw1,ch1,TrayClockWClass1,ahk_class Shell_TrayWnd
;如果是用控件的id来获取,那么就省略控件名称,将窗口名称替换成ahk_id %controlid%这样的,如下:(注意原控件名称留空后的连续逗号)
ControlGetPos, cx1,cy1,cw1,ch1,,ahk_id %controlid%

;移动控件位置,其中可以第2,3,4,5参数可以用 表达式, % "x" trayx 20 这样的。
;这种表达式同样适用于gui中添加控件时候的选项如: gui,add,text, % "x" tx 1 " y" ty 10 这样的(要注意参数之间的空格)
;xy,wh这两个要成对出现,单独出现一个无效
controlmove, ToolbarWindow323, % "x" tx1-90 , % "y" ty1 1,,, ahk_class Shell_TrayWnd
controlmove, ToolbarWindow323, x20 ,y20, w200,h200, ahk_class Shell_TrayWnd

;定时程序:其中labelname1为标签,deltatime为间隔时间,单位为毫秒。
settimer,labelname1,deltatime
settimer,labelname1,off ;关闭该定时

;gui窗体中将text控件透明投射到背景pic中的时候,可以将pic控件参数添加0x4000000 AltSubmit,配合text的backgroundtransparent效果好
GUI,
 10:add ,picture, x0 y0 W%width1% H%height1% 0x4000000 vedittaskbar 
AltSubmit , % g_taskbarmodebgpic  ;altsubmit参数搭配backgroundtrans才有效
GUI, 10:Add, text, x0 y%text_ypos1%  W%width1% H%height1% BackgroundTrans  center  , % "" 

;显示隐藏控件,如果知道该控件的窗体名,可以用guicontrol来设置,可以用control来设置;
GuiControl, 50:hide, myclocktime1 ;其中myclocktime为该控件的关联变量vmyclocktime的名称,也可以用该控件的id,推荐关联变量
GuiControl, 50:hide, static1 ;也可以是classNN名称

Control, show,,% "TrayClockWClass1", % "ahk_class Shell_TrayWnd" ;这个是利用窗口和控件来实现
Contro,show,,, ahk_id %controlid% ;这个是利用控件id来实现,可以操作隐藏控件。

;窗口一些操作
winset, alwayasontop,on, % wintile 
winset, transcolor, EAEAEA 230 ;这个是将指定颜色进行透明化,255为不透明
winset,transparent, 230 , % win-title ;这个是将整个窗体透明化,其中win-title使用时候需要注意,引用错误将不会起效
winset,redraw ;在一些文本控件内容变化时如果出现残影,可以用此命令,或者也可以用:
guicontrol, 10:movedraw,static3 

;针对任务栏的时候,将此处的颜色设置为与背景不一样,或者相反色,透明设置为255,背景颜色会显示正常。
;如果想在任务栏上显示透明,将此处颜色设置为与背景颜色一致,且字体颜色最好与背景颜色相差大,否则阴影看起来效果很差,
;如果系统为黑色主题,那么将字体颜色设为浅色,背景颜色设为深色
;如果系统为浅色主题,那么将字体颜色设为深色,背景颜色设为浅色
winset, transcolor, % guibaclgroundcolor 255

;修改控件文本显示的内容(注:control开头的命令都应该遵循这种原则)
controlsettext, static3, % inputcmd , % win_titlename ;最常用的命令
ControlSetText, % "edit" num1 5, % stock_out[a_index,5], % g_title  ;控件名称也可以用表达式来实现
如果对控件id操作,那么将控件名留空,将窗体名设为控件id,如:((注:control开头的命令都应该遵循这种原则,注意连续逗号)
controlsettext,,% changgetext, ahk_id %controlid%
或者使用guicontrol来设置,采用控件的关联变量名称,也可以是控件id,例如:(注意连续逗号,)
GuiControl,,myclocktime1,% changetext

;获取控件内容guicontrolget
GuiControlGet, OutputVar, FocusV, edit1, win_title ;获取控件的关联变量v,如果命令是是focus,则获取的是edit1,static1这样classNN。其中控件可以采用id。
GuiControlGet, OutputVar, Visible, edit1, win_title ; 如果控件是可见的则获取的值为 1, 隐藏的则为 0
;要对非默认窗口进行操作 (请参阅下面), 需要在子命令前加上窗口名称或编号和一个冒号, 例如
;GUI 线程的 默认窗口名称 是运行此线程的窗口名称. 非 GUI 线程的默认窗口编号为 1
GuiControlGet, Outputvar, MyGui:Focus

;用controlget来获取隐藏控件或者非当前窗口上的控件的可见性
;标准命令:ControlGet, OutputVar, Cmd [, Value, Control, WinTitle
;如果直接用controlid来替代wintle,那么就省略contol参数,visible本身的value参数也是空,所以由三个连续逗号
controlget, vis1, visible,,,ahk_id %txt1id% ;直接利用控件的id来获取其可见性,1或者0,注意连续逗号
controlget, txt1id,hwnd,,static1 ,% "MyClock" ;获取输出时间的控件hwnd

;try命令,如果测试运行错误,则执行下面的catch
try run, notepad.exe
try{
commandline1
commandline2
}
catch
{
msgbox
}
;如果没有catch,则什么也不做。


;鼠标双击事件
;原理就是通过两次点击后变量=2,触发定时程序中的代码,然后再在定时程序中关闭定时,并复位变量值
~LButton:: ;如果需要右键,则为Rbutton
{
        gnPressCount  = 1
        if gnPressCount = 1
            SetTimer, ProcSubroutine, 300  ;300为间隔时间,ms单位
        Return
}

;对应双击定时程序
ProcSubroutine:
{
        ; 在计时器事件触发时,需要将其关掉
        SetTimer, ProcSubroutine, Off
        If gnPressCount = 2
        {
           ; 这里面就是需要双击时候运行的程序
            }
                ;如果是单击,则表示发送原有功能,如Send {AppsKey}
        }
        ; 在结束后,还需要将鼠标右键的按键次数置为0,以方便下次使用
        gnPressCount := 0
        Return
}

;双击热键程序
;原理就是通过判断两次触及的热键是否相等(表示一个键按了两次),并且间隔时间是否超过规定毫秒数值
;如果超过就不触发,否则就触发双击事件
~ALT::    
    if (A_PriorHotkey <> g_hotkeyname or A_TimeSincePriorHotkey > 350 ) ;只有第二次
    {
        ;msgbox, % "Too much time between presses, so this isn't a double-press."
        KeyWait, % g_hotkeyname ;等第二次热键按下
        EmptyMem()
        return
    }
;这里放置双击热键需要运行的代码段落
   return

;日期和时间
;留空第二个参数(连续逗号)就表示采用当前系统时间,将结果存储到变量nowtime中
;yyyyMMdd为输出格式,例如 20201017, M为大写
FormatTime, nowtime,, yyyyMMdd ;结果为 20201017
FormatTime, nowtime,, yyyy/MM/dd ;结果为 2020/10/17
FormatTime, time1,, HH:mm:ss ;结果为:21:40:22

;获取网页文本内容并存储到变量(适合纯文本内容,如txt或者json之类的)
try
{
whr1 := ComObjCreate("WinHttp.WinHttpRequest.5.1")
url1:=" string1 
whr1.Open("GET", " ;也可以用url1来表示,不要带百分号
whr1.Send()
}
catch
{
  msgbox,, % "网络错误", % "网络连接失败,请检查后Ctrl Alt P刷新",2
  EmptyMem()
  return
}

;运行过程中修改控件edit的只读属性
;****重要说明:该命令对带编号的窗口不起作用,直接取消编号就可以。(应该是默认窗口的问题,尚未研究)
GuiControl, -ReadOnly, myedit1 ;这个myedit1为控件edit1的关联变量,后面的win_title有点讲究
guicontrol, % " readonly" , myedit%bumbers% ;也可以用表达式来

GuiControl, MyGui:Show, MyButton ;这个是guicontrol官方命令针对非默认窗口进行修改的时候的介绍

;设置输出文本固定长度
scaleme :=substr(scaleme . "00000" , 1 , 5) ;补齐5位,多余的自动剔除
ls_data2 :=substr("        " . ls_data2,-6) ;截取后7位,前面的自动剔除,0为最后一位,-6为最后7位

;设定文本输入限于某种格式
scaleisnumber :=RegExMatch(scaleme, "^1\.\d\d\d") ;判断是否存在多个非数值的字符,只允许1.XXX这样的数字
if scaleisnumber
msgbox , % "输入正确!"


;文件读写:

Loop, Read, %InputFile% ;循环逐行读入

Loop, Read, %InputFile%
IfExist, %outputfile%
    FileDelete, %outputfile%
newfile1 :=fileopen(outputfile, "a") ;A表示写
   newfile1.Write(string)
newfile1.close()

;正则表达式替换任意连续空格为分隔符号
temp0 :=RegExReplace(trim(g_clb[gj]), "\s " ,"|")