#Persistent
; gui的g标签 和settimer早就支持函数
; 标签太多的话 变量名容易混 变量值容易被搞错 
; 像 for k,v 这种常见取名 我已经取到 for k6,v6了 
; 还是出错了 
; 是的 用 settimer 调用函数 同时传参 
; 就是把某个函数连同其参数 绑定到一个变量上 然后 settimer 那个变量 

; 精简版示例
ceshi := Func("HideGui").Bind("预设传参11")
SetTimer, %ceshi%, -50
Return

HideGui(s:="") {
  ToolTip % "传参为:" s
}

/*
#Persistent
a := Func("HideGui").Bind("预设传参11")
b := a
SetTimer, %a%, 100
Return

HideGui(s:="") {
  ToolTip % "传参为:" s
}

F1::SetTimer, %b%, Off
*/

; 以下是一个单独的例子
; Timer(function, period, priority, parameters*)

timer1 := new Timer("ShowParams", 250,, "一", "二", "三") ;绑定参数
timer1.On() ; 启动计时器
Sleep, 2000

timer2 := new Timer("ShowParams", 550,, 1, 2) ;绑定参数
timer2.On() ; 启动计时器
Sleep, 3000
timer2.Off() ; 暂停计时器
timer2 := "" ; 删除计时器

ShowParams(a, b, c := 3){
  Tooltip, %a%-%b%-%c%
}

class Timer {
  __New(callback, period := 250, priority := 0, params*) {
    if (!IsFunc(callback)) ; 不存在该函数
      throw Exception("Call to nonexistent function", -1)
    else if (!params.MaxIndex()) ; 无参数传入
      this.binding := Func(callback)
    else if (params.MaxIndex() < Func(callback).MinParams) ; 参数过少
      throw Exception("Too few parameters passed to funcion", -1)
    else if (params.MaxIndex() > Func(callback).MaxParams and !Func(callback).IsVariadic) ; 参数过多
      throw  Exception("Too many parameters passed to funcion", -1)
    else
      this.binding := Func(callback).Bind(params*)

    this.period := period
    this.priority := priority
  }
  __Delete(){
    funcObj := this.binding
    SetTimer, %funcObj%, Delete
  }
  On(){
    funcObj := this.binding
    SetTimer, %funcObj%, % this.period, % this.priority
  }
  Off(){
    funcObj := this.binding
    SetTimer, %funcObj%, off
  }
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。