Вы должны войти, чтобы создавать сообщения и темы.

Трей

1◄Страница 4 из 4

Mikhail, немного изменил/упростил код, так как некоторые параметры мне не нужны: мне гораздо удобнее просто ввести имя окна, без указания идентификаторов. Также убрал  режим СкопированоSetTitleMatchMode, Скопировано2. Работает идеально! С какими-либо ошибками пока не столкнулся. 
Посмотрите, пожалуйста, корректно ли прописан код?
Кстати, если в этот код добавить команду СкопированоWinHide, %WinTitle%, будет та же самая проблема

#Persistent
#SingleInstance force
#NoTrayIcon
DetectHiddenWindows, On

IniRead, WinTitle, %A_ScriptDir%\config.ini, Settings, WinTitle,

Menu, Tray, NoStandard
Menu, Tray, Add, Hide/Show
Menu, Tray, Default, Hide/Show
Menu, Tray, Add, Exit
Menu, Tray, Click, 1

Loop {
    WinWait, %WinTitle%
    Menu, Tray, Icon
    WinWaitClose, %WinTitle%
    Menu, Tray, NoIcon
    }
return

Hide/Show:
    if WinExist(WinTitle) {
        if DllCall("IsWindowVisible","ptr",WinExist(WinTitle)) {
            WinHide, %WinTitle%
        } else {
            WinShow, %WinTitle%
            WinRestore, %WinTitle%
            WinActivate, %WinTitle%
        }
    }
return

Exit:
ExitApp

 

¯\_(ツ)_/¯, у меня работает без нареканий вообще, любая приложуха...

Посмотрите, пожалуйста, корректно ли прописан код?

Если работает, значит нормально😅

Лайкнули Psydiant и Имир
PsydiantИмир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, не, ну может, можно как-то получше прописать код)) Лучшее — враг хорошего)) Просто как бы сюда пристроить скрытие окна при его первом появлении? Команда СкопированоWinHide, %WinTitle% в блоке СкопированоLoop в принципе работает, особенно с задержкой СкопированоSleep, но не понятно, почему иногда не срабатывает.

Mikhail, возможно, я неправильно выразился, я имел в виду не запуск программы с помощью СкопированоAutoHotkey, командой СкопированоRun, C:\Путь\К\Программе.exe, , Hide, а именно ручной запуск, чтобы нужное окно "появилось" в скрытом режиме.

В том предыдущем коде, приложение запускается основное(то есть тот что ждет процесс) сразу скрытно, далее запускает приложение так же скрытно, если ты откроешь приложение и закроешь его, а не свернешь, значок приложение пропадает в трее и снова, если запустить, то запуск скрытого не будет.
Тут переделал, если тебе нужно было это:

#Persistent
#SingleInstance ignore
#NoTrayIcon
SetTitleMatchMode, 2
DetectHiddenWindows, On

IniRead, WinTitle, %A_ScriptDir%\config.ini, Settings, WinTitle,
IniRead, AppPath,  %A_ScriptDir%\config.ini, Settings, AppPath,

if (AppPath != "" && AppPath != "ERROR")
    Run, "%AppPath%", , Hide

Loop {
    WinWait, %WinTitle%
    WinHide, %WinTitle%
    hwnd := WinExist(WinTitle)
    if !hwnd
        continue
    WinGet, pid, PID, ahk_id %hwnd%
    Menu, Tray, NoStandard
    Menu, Tray, Add, Hide/Show
    Menu, Tray, Default, Hide/Show
    Menu, Tray, Add, Exit
    Menu, Tray, Click, 1
    Menu, Tray, Icon
    Process, WaitClose, %pid%
    Menu, Tray, NoIcon
}
return

Hide/Show:
    if WinExist(WinTitle) {
        if DllCall("IsWindowVisible","ptr",WinExist(WinTitle))
            WinHide, %WinTitle%
        else {
            WinShow, %WinTitle%
            WinRestore, %WinTitle%
            WinActivate, %WinTitle%
        }
    }
return

Exit:
ExitApp
Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, работает, но не со всеми окнами, так как если приложение имеет другие окна, то иконка остаётся в трее после закрытия заданного окна. Поэтому я и изменил/упростил ваш скрипт, чтобы он читал только название окна. Тогда всё работает корректно: иконка появляется при открытии окна, при скрытии не исчезает, и исчезает только при закрытии окна. А скрытие окна сейчас сработало, но лишь один раз. При повторном открытии окна не работает

Mikhail, я так понял, что всё зависит от скорости запуска приложения. Судя по всему, нужна задержка СкопированоSleep, тогда всё работает корректно, проверил на разных приложениях

Mikhail, думаю, пока оставлю такую комбинацию. Вроде бы на всех окнах работает. Спасибо огромное за помощь! На сегодняшний день это лучшее решение для сворачивания в трей любых окон!

Loop {
    WinWait, %WinTitle%
    Menu, Tray, Icon
    Sleep 2000
    WinHide, %WinTitle%
    WinWaitClose, %WinTitle%
    Menu, Tray, NoIcon
    }
return

 

Mikhail, доброе утро! Извините, вопрос не по теме: подскажите, пожалуйста, а может ли СкопированоAutoHotkey определить какой именно файл запущен в программе и запустить его заново, если он был закрыт? Я знаю, что есть СкопированоGoneIn60s, но это не то, так как она всего лишь восстанавливает скрытые окна, а не запускает их заново

Имир, Привет.
Можно, сохранить путь до файла куда нить например, отследить и т.д., ну это надо тестить смотреть.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
1◄Страница 4 из 4