Что нового

Разворачивание окна из трея или его активация, если оно развернуто но не видно

lixar21

Новичок
Сообщения
70
Репутация
0
Доброго дня.
Помогите решить вопрос.
Есть окно которое имеет класс: Notepad

Как скриптом autoit свернуть это окно в трей (если окно развернуто), развернуть окно из трея (если оно свернуто в трей) ?
Но если окно развернуто, но закрыто (хотя бы частично) другими окнами - то его нужно не сворачивать, а сделать активным.


Вот такой скрипт не работает.
Код:
Opt('WinTitleMatchMode', -2)

Local $aWnds = WinList("Список.txt — Блокнот")
For $i = 1 To $aWnds[0][0]
    WinSetState($aWnds[$i][1], Null, @SW_HIDE)
Next

Он сворачивает окна не по классу "Notepad", а по title.
И он только сворачивает окно, но не разворачивает его из трея при повторном запуске.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Вот пример из справки по "WinGetState" , только для окна , которое имеет класс: Notepad:
Код:
$iState = WinGetState("[CLASS:Notepad]", "")

$sText = ''
; Проверка, наличия указанных параметров состояния окна?
If BitAND($iState, 1) Then
    $sText &= 'существует' & @LF
Else
    MsgBox(4096, "Сообщение", 'ОКНО НЕ СУЩЕСТВУЕТ')
    Exit
EndIf

If BitAND($iState, 2) Then
    $sText &= 'не скрыто' & @LF ; @SW_SHOW
Else
    $sText &= 'скрыто' & @LF ; @SW_HIDE
EndIf

If BitAND($iState, 4) Then
    $sText &= 'доступно' & @LF ; @SW_ENABLE
Else
    $sText &= 'не доступно' & @LF ; @SW_DISABLE
EndIf

If BitAND($iState, 8) Then
    $sText &= 'активно' & @LF
Else
    $sText &= 'не активно' & @LF
EndIf

If BitAND($iState, 16) Then
    $sText &= 'свёрнуто' & @LF ; @SW_MINIMIZE
Else
    $sText &= 'не свёрнуто' & @LF ; @SW_RESTORE
EndIf

If BitAND($iState, 32) Then
    $sText &= 'развёрнуто на весь экран' & @LF ; @SW_MAXIMIZE
Else
    $sText &= 'не развёрнуто на весь экран' & @LF ; @SW_RESTORE
EndIf

MsgBox(4096, "Сообщение", $sText)
 
Автор
L

lixar21

Новичок
Сообщения
70
Репутация
0
ra4o, понятно. Спасибо.
А как окно Notepad - сворачивать и разворачивать из трея - в соответствии с этим скриптом ?
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
lixar21 [?]
А как окно Notepad - сворачивать и разворачивать из трея - в соответствии с этим скриптом ?

Кажется, я понял: Вы хотите иметь возможность сворачивать блокнот "в трей"?

Насколько я знаю, стандартными средствами ОС можно просто свернуть окно, скрыть окно, отобразить, развернуть и т.д... Вам придется написать скрипт, который будет отлавливать момент, когда Вы свернете нужное окно, затем скрипт будет скрывать это окно и создавать иконку в трее. Далее скрипт должен ожидать клика по иконке в трее, после клика прятать иконку и отображать окно.

Если Вам это нужно только для одного окна, то подойдут стандартные функции AutoIt для отображения иконки. Если планируется скрывать "в трей" все свернутые окна блокнота, то могу порекомендовать UDF ModernMenu с помощью которой можно создавать несколько иконок в трее от одного процесса AuttoIt.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Разворачивать - сворачивать так можно :
Код:
$iState = WinGetState("[CLASS:Notepad]", "")

If NOT BitAND($iState, 1) Then
    MsgBox(4096, "Сообщение", 'ОКНО НЕ СУЩЕСТВУЕТ')
    Exit
EndIf

If BitAND($iState, 16) Then
    WinSetState("[CLASS:Notepad]", "", @SW_RESTORE)
Else
	WinSetState("[CLASS:Notepad]", "", @SW_MINIMIZE)
EndIf
 
Верх