Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Как расставить окна "сеткой"? (http://forum.oszone.net/showthread.php?t=314515)

mishalenin 03-05-2016 14:56 2631557

Как расставить окна "сеткой"?
 
Создал простой скрипт для расстановки окон сеткой,

Opt("WinTitleMatchMode",2)


$hList = WinList("[Title:Table]")
WinMove ($hList[1][1], "", 2720,600,800,566)
WinMove ($hList[2][1], "", 2720,0,800,566)
WinMove ($hList[3][1], "", 1920,0,800,566)
WinMove ($hList[4][1], "", 1920,600,800,566)
WinMove ($hList[5][1], "", 1120,600,800,566)
WinMove ($hList[6][1], "", 1120,0,800,566)
WinMove ($hList[7][1], "", 320,0,800,566)
WinMove ($hList[8][1], "", 320,600,800,566)

если окон нет, то мне выдает ошибку




если есть 1 окно он его ставит в нужную позицию, но выдает опять ту же ошибку, только ругаясь уже WinMove ($hList[2][1], "", 2720,0,800,566), либо выше, когда открыто 8 окон и запускаешь скрипт, все окна встаю по позициям, ошибок нет.

Ещё бы хотелось все это автоматизировать. при появлении первого окна перемещает его в первую позицию, дальше ждет 2 е окно, при появлении 2 го ставит во вторую и т.д. так 8 окон.

>>>> Window <<<<
Title:Table
Class: #32770
Position: 1920, 0
Size: 800, 566
Style: 0x940B0044
ExStyle: 0x00010010
Handle: 0x0000000000091304

все параметры кроме Handle постоянные.

mishalenin 03-05-2016 16:01 2631565

Сделал вот так:
Opt("WinTitleMatchMode",2)

$hList = WinList("[Title:Table]")
Func _win()
If $hList[0][0] < 1 Then WinWait ($hList[0][0])
If $hList[0][0] >= 1 Then WinMove ($hList[1][1], "", 2720,600,800,566)
If $hList[0][0] >= 2 Then WinMove ($hList[2][1], "", 2720,0,800,566)
If $hList[0][0] >= 3 Then WinMove ($hList[3][1], "", 1920,0,800,566)
If $hList[0][0] >= 4 Then WinMove ($hList[4][1], "", 1920,600,800,566)
If $hList[0][0] >= 5 Then WinMove ($hList[5][1], "", 1120,600,800,566)
If $hList[0][0] >= 6 Then WinMove ($hList[6][1], "", 1120,0,800,566)
If $hList[0][0] >= 7 Then WinMove ($hList[7][1], "", 320,0,800,566)
If $hList[0][0] >= 8 Then WinMove ($hList[8][1], "", 320,600,800,566)
EndFunc
While 1
_win()
sleep (1000)
WEnd
ошибки пропали, все какие окна открыты расставляет, но новые окна которые открываются не трогает.

Iska 03-05-2016 17:48 2631576

Цитата:

Цитата mishalenin
но новые окна которые открываются не трогает. »

Естественно. Вы ведь запрашиваете перечень окон один раз до входа в бесконечный цикл.

mishalenin 03-05-2016 19:02 2631589

Iska, спасибо, помогло, но сейчас новая проблема, окна перетасовываются (((

Iska 03-05-2016 19:17 2631593

Цитата:

Цитата mishalenin
но сейчас новая проблема, окна перетасовываются ((( »

Попробуйте предварительно сортировать их, например, по хэндлу. Но мне сам Ваш подход с постоянным ежесекундным перемещением окон не нравится.

mishalenin 04-05-2016 10:32 2631722

Можно на примере хотя бы, на паре моих окн, я ещё совсем нуб! Спасибо огромное!

Iska 04-05-2016 13:04 2631779

Цитата:

Цитата mishalenin
Можно на примере хотя бы, на паре моих окн, »

Нельзя. У меня нет Ваших окон. И, как я написал выше — мне не нравится сам данный подход.

mishalenin 04-05-2016 18:58 2631900

Ок, спасибо за помощь.


Время: 22:11.

Время: 22:11.
© OSzone.net 2001-