Search code examples
windowautoit

How to close _ArrayDisplay() window?


How to close _ArrayDisplay()'s window using AutoIt script itself? I tried WinClose():

_ArrayDisplay($aarray,"sometitle")
; do some stuff
Winclose("sometitle")  
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")

but fails (previous window doesn't get closed and next window doesn't appear). So I tried WinKill():

_ArrayDisplay($aarray,"sometitle")
; do some stuff
Winkill("sometitle")  
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")

then previous window is closed, but the next window never appears. It seems Winkill() killed all _ArrayDisplay() instances. Other attempts :

_ArrayDisplay($aarray,"sometitle")
; do some stuff
While WinExists("sometitle")
    Winclose("sometitle") 
    Sleep(100)
WEnd
Sleep(1000)
_ArrayDisplay($barray,"anothertitle")

And:

_Arraydisplay($aarray,"sometitle")
; do some stuff
WinActivate("sometitle")
While WinExists("sometitle")
    Send("!{F4}"      
    Sleep(100)
WEnd
Sleep(1000)
_Arraydisplay($barray,"anothertitle")

I also tried Send() using "!{F4}" and "{ALTDOWN}{SPACE DOWN}c{ALTUP}{SPACE UP}". All fail to close previous _ArrayDisplay() window. How to make this work?


Solution

  • #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 is a Gui which uses a message loop. The script remains in the loop until an event allows an exit from the loop.

    One concept of doing an action while looping is to register a function using AdlibRegister. The _Closer function registered above will be called every 250 milliseconds until AdlibUnRegister can stop the function from being called.