Что нового

Функция "Отображать рядом" применительно лишь к некоторым окнам (а не всем)

yl3d

Новичок
Сообщения
70
Репутация
0
Добрый день.
В Windows есть такая опция - "Отображать окна рядом".
Она вызывается если щелкнуть правой кнопкой мыши по панели задач (в выпадающем контекстном меню).
Окна после этого располагаются на экране все вместе, изменяясь в размерах - чтобы всем уместится.

Но есть проблема - в таком порядке перестраиваются окна - на всех мониторах, что не есть хорошо.
Скажите - как скриптом "Отображать Рядом" только те окна, которые имеют в своем Title - текст "Книга 1:" ?
(а остальные окна чтобы не меняли своего положения)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Здесь две проблемы.
Первая - реализация универсального алгоритма размещения окон в зависимости от их количества. Кстати, на Win7 и Win10 алгоритмы разные.
Вторая - привязка окон к определённому монитору.

Пример размещения окон со словом "Блокнот" в заголовке на основном мониторе и только в один ряд
Код:
#include <WinAPISys.au3>

Opt("WinTitleMatchMode", 2)
Opt("WinWaitDelay", 10)

; область рабочего стола
$tRECT = _WinAPI_GetWorkArea()
$iWidth = $tRECT.Right - $tRECT.Left
$iHeight = $tRECT.Bottom - $tRECT.Top

; поиск окон
$aList = WinList("Блокнот")
If Not $aList[0][0] Then Exit MsgBox(0x40000, "", "Окна не найдены")

; размещение окон в один ряд
$iDelta = $iWidth / $aList[0][0]
For $i = 1 To $aList[0][0]
  WinMove($aList[$i][1], "", $iDelta * ($i - 1), 0 , $iDelta, $iHeight)
  WinActivate($aList[$i][1])
Next
 
Автор
Y

yl3d

Новичок
Сообщения
70
Репутация
0
Подскажите, а вот в этом е которой вы привели - как расположить окна с названием включающем слово "Блокнот", в главном мониторе (1920:1080) так, чтобы они были в виде квадрата 2x2 ?
(То есть два окна - в верхнем ряду и два ряда в нижнем. Всего окон будет открыто как раз четыре )
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
yl3d [?]
чтобы они были в виде квадрата 2x2
Код:
#include <WinAPISys.au3>

Opt("WinTitleMatchMode", 2)
Opt("WinWaitDelay", 10)

; область рабочего стола
$tRECT = _WinAPI_GetWorkArea()
$iWidth = $tRECT.Right - $tRECT.Left
$iHeight = $tRECT.Bottom - $tRECT.Top

; поиск окон
$aList = WinList("Блокнот")
If Not $aList[0][0] Then Exit MsgBox(0x40000, "", "Окна не найдены")

If $aList[0][0] = 4 Then
  ; размещение четырёх окон в два ряда
  $iDX = $iWidth / 2
  $iDY = $iHeight / 2
  WinMove($aList[1][1], "", 0, 0 , $iDX, $iDY)
  WinMove($aList[2][1], "", $iDX, 0 , $iDX, $iDY)
  WinMove($aList[3][1], "", 0, $iDY , $iDX, $iDY)
  WinMove($aList[4][1], "", $iDX, $iDY , $iDX, $iDY)
Else
  ; размещение окон в один ряд
  $iDelta = $iWidth / $aList[0][0]
  For $i = 1 To $aList[0][0]
    WinMove($aList[$i][1], "", $iDelta * ($i - 1), 0 , $iDelta, $iHeight)
  Next
EndIf

For $i = 1 To $aList[0][0]
  WinActivate($aList[$i][1])
Next
 
Верх