如何关闭_ArrayDisplay()窗口?

时间:2018-03-01 13:09:18

标签: window autoit

如何使用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()窗口。如何使这项工作?

2 个答案:

答案 0 :(得分:3)

#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可以停止该功能 被召唤。

答案 1 :(得分:0)

现在我尝试在函数_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窗口的解决方案,但我认为它会有所帮助,所以我留下这个答案。谢谢: - )