AutoIt _Timer_SetTimer - 额外的回调参数

Posted

技术标签:

【中文标题】AutoIt _Timer_SetTimer - 额外的回调参数【英文标题】:AutoIt _Timer_SetTimer - Additional callback arguments 【发布时间】:2016-04-23 16:38:33 【问题描述】:

使用 AutoIt 3,有没有办法在 _Timer_SetTimer 函数中将额外的参数传递给回调方法?

这是我的用例(主循环):

For $item In $items
    _Timer_SetTimer(0, $timeOffset, "MyMethod")
Next

回调方法:

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime)
    _Timer_KillTimer ( $hWnd, $iTimerID )

    // Do something on $item

EndFunc

我尝试使用Global 变量,但MyMethod 的每个实例都使用最后一个值。我是这样做的:

Global $currentItem

For $item In $items
    $currentItem = $item
    _Timer_SetTimer(0, $timeOffset, "MyMethod")
Next

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime)
    _Timer_KillTimer ( $hWnd, $iTimerID )

    $item = $currentItem
    // Do something on $item

EndFunc

那么,我做错了还是有办法直接传递参数?谢谢。

【问题讨论】:

【参考方案1】:

如果您的延迟调用是有序的,您仍然可以使用全局变量将值存储在数组中:

Global $values[0]

For $item In $items
     _ArrayAdd($values, $item)
     _Timer_SetTimer(0, $timeOffset, "MyMethod")
Next

Func MyMethod($hWnd, $iMsg, $iTimerID, $iTime)
     _Timer_KillTimer ( $hWnd, $iTimerID )

     _ArrayReverse($values)
     $item = _ArrayPop($values)
     _ArrayReverse($values)

    // Do something on $item

EndFunc

double reverse 和 pop 是用来模拟 FIFO 队列的

【讨论】:

以上是关于AutoIt _Timer_SetTimer - 额外的回调参数的主要内容,如果未能解决你的问题,请参考以下文章

autoit3使用tooltip如何把字体放大

如何为 AutoIt 和 PowerShell 获得相同的 base64 编码?

使用 AutoIt 获取所有打开的窗口的列表

Autoit中用PrintWindow替代ScreenCapture函数实现截图

AutoIt3常见问题解答

autoit 用IE打开网页