Реализовал своеобразную очередь. Запускаются процессы, для каждого процесса свое окно, они выстраиваются по порядку сверху вниз. В процессе работы процессы завершаются и закрывают свои окна соответственно оставляя пробелы в своеобразной очереди.
Тут я реализовал перемещение окна вверх на расстояние своей высоты если предыдущее окно отсутствует.
Тут я реализовал перемещение окна вверх на расстояние своей высоты если предыдущее окно отсутствует.
Код:
Global $aList = WinList("[REGEXPTITLE:Мой GUI \d+]")
Global $numwin = UBound($aList)
Global $numpred
Opt('WinTitleMatchMode', 3)
If UBound($aList) == '1' Then
$left = 0
$top = 0
Else
$numpred = $numwin - 1
$aArr = WinGetPos("Мой GUI " & $numpred)
$left = 0
$top = $aArr[1] + $aArr[3]
EndIf
$hGUI = GUICreate("Мой GUI " & $numwin, 400, 100, $left, $top, 0x00CF0000, 0x00000008)
GUISetState(@SW_SHOW)
While 1
Sleep(50)
_1()
Switch GUIGetMsg()
Case -3
ExitLoop
EndSwitch
WEnd
GUIDelete()
Func _1()
$aWinPos = WinGetPos("Мой GUI " & $numwin)
$aWinPosPred = WinGetPos("Мой GUI " & $numpred)
If WinExists("Мой GUI " & $numpred) = 0 And $numpred <> 0 And $aWinPos[1] - $aWinPos[3] > 0 Then
$snew_top = $aWinPos[1] - $aWinPos[3]
WinMove($hGUI, '', 0, $snew_top)
$numpred -= 1
Else
If IsArray($aWinPosPred) Then
If ($aWinPosPred[1] + $aWinPosPred[3]) < $aWinPos[1] And $aWinPos[1] - $aWinPos[3] > 0 Then
$snew_top = $aWinPos[1] - $aWinPos[3]
WinMove($hGUI, '', 0, $snew_top)
EndIf
EndIf
EndIf
EndFunc ;==>_1