Что нового

Программа перестаёт сворачиваться повторно

Jotun

Новичок
Сообщения
31
Репутация
0
Программа при нажатии на значёк "свернуть" - сворачивается в трей.
Если я применяю команду - WinSetState ( "title", "text", @SW_MINIMIZE) - программа сворачивается в таск-бар.
Тогда, чтобы свернуть в трей я сделал так:
Код:
Send ("!{SPACE}")
Send ("n")


Но повторно провернуть такой фокус не получается, после восстановления окна программа отказывается принимать это сочетание клавишь.

Код:
WinActivate ( $hWindWss )
WinWaitActive ( $hWindWSS )
Send ("!{SPACE}")
Send ("n")


Программа после этого вообще перестаёт сворачиваться ни в таск-бар, ни в трей, кнопка "свернуть" в заголовке просто перестаёт работать :(

Проблема возникает после использования WinActivate или WinSetState ( "", "", @SW_RESTORE )
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Нверное это глюк этой конкретной программы и ничего не сделать
 

agikon

Знающий
Сообщения
789
Репутация
17
надо видеть весь код.
а так трудно понять.
обычно операции сворачивания и разворачивания работают исправно если правильно код составить.
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Ну это часть большой программы, но вот скажем этот участок вынесеный в отдельный скрипт:
Код:
Run ("D:\Games\L2 HellBound\L2Walker_10.9.1\WSS.exe", "D:\Games\L2 HellBound\L2Walker_10.9.1" )
WinWaitActive ("[TITLE:L2Walker Server Selector v2.7 by Sh00rGo]")
Sleep (250)
Send ("!{SPACE}")
Sleep (250)
Send ("n")
Sleep (1000)
; Запустили - > свернули
; Пробуем назад и больше она сворачиваться не хочет
WinActivate ("[TITLE:L2Walker Server Selector v2.7 by Sh00rGo]")
WinWaitActive ("[TITLE:L2Walker Server Selector v2.7 by Sh00rGo]")
Sleep (250)
Send ("!{SPACE}")
Sleep (250)
Send ("n")


Комбинация ALT+Space работает, пропадает возможность свернуть
 

agikon

Знающий
Сообщения
789
Репутация
17
я обычно сворачиваю так- на горячую клавишу цепляю функцию сворачивания, и работает всегда на 100%
в начале скрипта обьявляю гор клавишу и цепляю на неё функцию
Код:
HotKeySet('q', '_hide')

потом вконце скрипта создаю саму функцию
Код:
func _hide()
WinSetState("[REGEXPTITLE:.*L2Walker.*]","", @SW_MINIMIZE)
endfunc
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Так она тоже сворачивается в таск-бар. Ну не важно, я думал может это проблема кому-то известна. AutiIT видимо выставляет какой-то атрибут после которого эта старая программа перестаёт сворачиваться.
 

agikon

Знающий
Сообщения
789
Репутация
17
Jotun [?]
AutiIT видимо выставляет какой-то атрибут после которого эта старая программа перестаёт сворачиваться.
ничего аутоит сам не выставляет.
всё прекрасно работает если правильно составить код.
вы непонятно каким образом сворачиваете.
та и имя окна может изменятся, поэтому советую сделать так как я выше привёл пример (сворачивать окно по маске имени окна)
Ну не важно, я думал может это проблема кому-то известна.
:smile:
какая ещё проблема?
советую вам просто создать самое простое окно блокнота и поэкспериментировать с ним.
после этого уж точно станет понятно что не так.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun [?]
сворачивается в трей
Скорее всего программа не сворачивается, а скрывается. И проблемы, вероятно, начинаются, когда вы к не свёрнутой программе применяете @SW_RESTORE.
Попробуйте для восстановления из трея использовать один из макросов: @SW_SHOW, @SW_SHOWDEFAULT, @SW_SHOWNA, @SW_SHOWNORMAL.
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Я вручную запускаю программу, сворачиваюе её тоже вручную - без скриптов. После этого пробую восстановить окно различными способами:
Макросами: WinSetState("[REGEXPTITLE:.*L2Walker.*]","", @SW_SHOWNORMAL) etc

Или вот так: WinActivate ("[REGEXPTITLE:.*L2Walker.*]")

Результат одинаковый - программа появляется, но после этого перестаёт сворачиваться вообще ( и вручную тоже ) - её нужно перезапускать.

С другими программами всё получается нормально.

Можете сами проверить если интересно: _https://yadi.sk/d/VUqivjWmcdwvj
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun
Какое число в консоли, когда окно программы "свёрнуто" в трей ?
Код:
ConsoleWrite(WinGetState("[REGEXPTITLE:.*L2Walker.*]") & @CRLF)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun
Свернуть программу в трей можно так
Код:
#include <SendMessage.au3>
#include <WindowsConstants.au3>
_SendMessage(WinGetHandle("L2Walker"), $WM_SYSCOMMAND,  0xF020) ; $SC_MINIMIZE
А вот "правильно" восстановить, думаю, что только двойным кликом по иконке в трее.
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
InnI сказал(а):
Свернуть программу в трей можно так
Код:
#include <SendMessage.au3>
#include <WindowsConstants.au3>
_SendMessage(WinGetHandle("L2Walker"), $WM_SYSCOMMAND,  0xF020) ; $SC_MINIMIZE

Да, так сворачиваются на ура, спасибо за метод)

С воостановлением что-нибуть альтернативное сделаю. Закрыть - запустиь, или ещё как.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun [?]
что-нибуть альтернативное сделаю
Можно и альтернативное. А можно и в иконку в трее кликать. Вот пример. Вот изменения
Код:
...
Global $tray, $search = "WSS:"
...
      _GUICtrlToolbar_ClickIndex($tray, $i, "left", False, 2)
...
Для Win8 ещё здесь
Код:
ControlClick("[class:Shell_TrayWnd]", "", "Button3")
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Да, так всё работает. Спасибо.

п.с. Что это за болезнь такая, сел набросать по быстрому скрипт с парой кнопок для запуска 3-х программ, вторую неделю сижу, кода на 500 строк, уже делаю третье окно и идеи появляются быстрей чем я их успиваю реализовывать :smile:
 
Верх