如何使用AutoIt脚本本身关闭_ArrayDisplay()
的窗口?我试过WinClose()
:
_ArrayDisplay($aarray,"sometitle")
; do some stuff
Winclose("sometitle")
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")
但失败(前一个窗口没有关闭,下一个窗口没有出现)。所以我尝试了WinKill()
:
_ArrayDisplay($aarray,"sometitle")
; do some stuff
Winkill("sometitle")
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")
然后前一个窗口关闭,但下一个窗口永远不会出现。似乎Winkill()
杀死了所有_ArrayDisplay()
实例。其他尝试:
_ArrayDisplay($aarray,"sometitle")
; do some stuff
While WinExists("sometitle")
Winclose("sometitle")
Sleep(100)
WEnd
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")
和:
_Arraydisplay($aarray,"sometitle")
; do some stuff
WinActivate("sometitle")
While WinExists("sometitle")
Send("!{F4}"
Sleep(100)
WEnd
Sleep(1000)
_Arraydisplay($barray,"anothertitle")
我还尝试使用Send()
和"!{F4}"
的"{ALTDOWN}{SPACE DOWN}c{ALTUP}{SPACE UP}"
。所有未能关闭以前的_ArrayDisplay()
窗口。如何使这项工作?
#include <array.au3>
Global $aarray[1]
Global $barray[1]
AdlibRegister('_Closer')
_Arraydisplay($aarray, 'sometitle')
Sleep(1000)
_Arraydisplay($barray, 'anothertitle')
Func _Closer()
If WinExists('sometitle') Then
WinClose('sometitle')
AdlibUnRegister('_Closer')
EndIf
EndFunc
_ArrayDisplay是一个使用消息循环的Gui。脚本保持循环,直到事件允许退出循环。
循环时执行操作的一个概念是使用AdlibRegister注册函数。上面注册的_Closer函数将每250毫秒调用一次,直到AdlibUnRegister可以停止调用该函数。
现在我试图在函数_Arraydisplay()的一节中修改“array.au3”以插入超时选项(参数),感觉非常成功..
我在_Arraydisplay()中添加了3行,它们如下所示。首先,我在函数声明部分的末尾添加了timeout选项参数($ TimeOut = 0)。
Func _ArrayDisplay(Const ByRef $aArray, $sTitle = Default, $sArrayRange = Default, $iFlags = Default, $vUser_Separator = Default, $sHeader = Default, $iMax_ColWidth = Default, $iAlt_Color = Default, $hUser_Function = Default, $TimeOut = 0)
接下来,我在函数的起始点插入一行启动计时器。
If $TimeOut > 0 Then Local $_Start = TimerInit()
最后,当计时器值达到$ TimeOut(秒单位)时,在while循环中插入一行以转义while循环。
If $TimeOut > 0 And TimerDiff($_Start)/1000 >= $TimeOut Then ExitLoop
这就是全部......而且效果很好..
要使用超时选项调用该函数(7秒),
Arraydisplay($aarray, 'sometitle', 7)
; do some stuff
Sleep(1000)
Arraydisplay($barray, 'anothertitle')
Func Arraydisplay(Const ByRef $aArray, $sTitle="", $TimeOut = 0)
_Arraydisplay($aArray, $sTitle, Default,Default,Default,Default,Default,Default,Default,$TimeOut)
EndFunc
当然,这不是关闭arraydisplay窗口的解决方案,但我认为它会有一些帮助,所以我留下这个答案。谢谢:-)