Что нового

переключать последовательно на следующее окно

endpoints

Новичок
Сообщения
26
Репутация
0
Версия AutoIt: v3.3.14.2
Описание:
создается массив заголовков окон запущенных копий плеера -"Player"
$aList = WinList("[CLASS:blum:layer]")
скрипт должен определить позицию активного окна плеера в массиве и переключать последовательно на следующее окно плеера ( сделать активным следующее $aList[$i+1][0] окно плеера
Примечания: Подскажите,пожалуйста, как будет выглядеть данный код скрипта?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
For $i = 1 To 5
  Run("notepad.exe")
Next
Sleep(111)
; ---------------------------------
$aList = WinList("[class:Notepad]")
For $i = 1 To $aList[0][0]
  WinActivate($aList[$i][1])
  Send($i)
  Sleep(555)
Next
 
Автор
E

endpoints

Новичок
Сообщения
26
Репутация
0
вот то что у меня получилось
Код:
$aList = WinList("[REGEXPCLASS:PotPlayer64]")
$hWnd = WinGetHandle("[ACTIVE]")
$i = 1
While $i <= $aList[0][0] and not StringRegExp($aList[$i][1], $hWnd)
$i = $i + 1
WEnd

   If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then
		   select
	   case $i = $aList[0][0]
		  WinActivate($aList[1][0])
		   case  $i < $aList[0][0]
		  WinActivate($aList[$i+1][0])
	  EndSelect
	 EndIf


вот только переключаются не все окна а только два окна между собой

InnI,
мне нужно что бы при запуске скрипта происходила активация следующего по порядку окна
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
endpoints
при запуске скрипта происходила активация следующего по порядку окна
Следующего после активного?
Код:
$aList = WinList("[REGEXPCLASS:PotPlayer64]")
If $aList[0][0] > 1 Then WinActivate($aList[2][1])
 
Автор
E

endpoints

Новичок
Сообщения
26
Репутация
0
InnI сказал(а):
endpoints
при запуске скрипта происходила активация следующего по порядку окна
Следующего после активного?
Код:
$aList = WinList("[REGEXPCLASS:PotPlayer64]")
If $aList[0][0] > 1 Then WinActivate($aList[2][1])

так тоже получается переключение только между 2мя окнами
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
endpoints
Следующее окно после активного будет то, которое было активным перед ним. Так работает Windows и функция WinList.

Насколько я понял, вы хотите переключать окна по определённой последовательности. Допустим, вы запустили скрипт, создали первичную последовательность окон и сохранили её. При следующем запуске скрипта каких-то окон (возможно, и всех) может не быть. Или могут появиться новые. И куда переключать?
 
Автор
E

endpoints

Новичок
Сообщения
26
Репутация
0
InnI, получается нужно к примеру при каждом запуске скрипта, подсчитывать сумму символов или хэш заголовков окон, сортировать в зависимости от длинны, а дальше активировать последовательно следующее окно вес заголовка которого больше активного окна но и самое близкое к нему
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
endpoints
Конечно, можно делать так, как вы описали. Можно и по размеру окна сортировать и по контрольной сумме пикселей текущего кадра и по температуре процессора на момент запуска плеера и даже по относительной влажности воздуха, если есть доступ к соответствующей информации. Всё зависит от поставленных целей. Ваших целей я пока не понимаю.
 
Автор
E

endpoints

Новичок
Сообщения
26
Репутация
0
а что непонятного? Смысл в запуске данного скрипта по хоткею, сейчас с клавиатуры хоткеем переключаются только 2 окна а остальные приходится открывать мышкой
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
endpoints
Смысл в запуске данного скрипта по хоткею
Запуск скрипта означает, что скрипт НЕ работает. При работающем скрипте по горячей клавише запускается функция. Это совсем не одно и то же. Если вам нужно переключать окна именно при запуске скрипта, то проблемы я описал выше.

Предлагаю такой вариант. При запущенном скрипте клавиша F2 переключает на следующее окно после активного. Если активного нет, то активируется то, которое последним было активно. При попытке переключения на несуществующее окно вся цепочка будет обновлена автоматически и переключится на следующее окно (при наличии) в новой цепочке. Если будете добавлять новые окна, то нужно принудительно обновить цепочку (F3), иначе новые окна не будут учитываться. Также, по F3, можете обновить последовательность окон в любой момент. Горячие клавиши, естественно, можете изменить.
Код:
For $i = 1 To 5
  Run("notepad.exe")
Next
Sleep(333)

; -----------------------------

HotKeySet("{F2}", "NextWindow")
HotKeySet("{F3}", "Refresh")

Global $aList, $sWnd = "[class:Notepad]"
Refresh()

While Sleep(111)
WEnd

Func NextWindow()
  Local $hWnd = WinGetHandle("")
  For $i = 1 To $aList[0][0]
    If $hWnd = $aList[$i][1] Then
      If $i = $aList[0][0] Then $i = 0
      If Not WinActivate($aList[$i + 1][1]) Then
        Refresh()
        If $aList[0][0] > 1 Then WinActivate($aList[2][1])
      EndIf
      ExitLoop
    EndIf
  Next
  If $i > $aList[0][0] Then WinActivate($sWnd)
EndFunc

Func Refresh()
  $aList = WinList($sWnd)
EndFunc
 
Верх