Трей
Цитата: Имир от 23.10.2025, 13:08Mikhail, немного изменил/упростил код, так как некоторые параметры мне не нужны: мне гораздо удобнее просто ввести имя окна, без указания идентификаторов. Также убрал режим
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
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
Цитата: Mikhail от 23.10.2025, 13:10¯\_(ツ)_/¯, у меня работает без нареканий вообще, любая приложуха...
Посмотрите, пожалуйста, корректно ли прописан код?
Если работает, значит нормально😅
¯\_(ツ)_/¯, у меня работает без нареканий вообще, любая приложуха...
Посмотрите, пожалуйста, корректно ли прописан код?
Если работает, значит нормально😅
Цитата: Имир от 23.10.2025, 13:22Mikhail, не, ну может, можно как-то получше прописать код)) Лучшее — враг хорошего)) Просто как бы сюда пристроить скрытие окна при его первом появлении? Команда
WinHide, %WinTitle%в блокеLoopв принципе работает, особенно с задержкойSleep, но не понятно, почему иногда не срабатывает.
Mikhail, не, ну может, можно как-то получше прописать код)) Лучшее — враг хорошего)) Просто как бы сюда пристроить скрытие окна при его первом появлении? Команда СкопированоWinHide, %WinTitle% в блоке СкопированоLoop в принципе работает, особенно с задержкой СкопированоSleep, но не понятно, почему иногда не срабатывает.
Цитата: Имир от 23.10.2025, 13:39Mikhail, возможно, я неправильно выразился, я имел в виду не запуск программы с помощью
AutoHotkey, командойRun, C:\Путь\К\Программе.exe, , Hide, а именно ручной запуск, чтобы нужное окно "появилось" в скрытом режиме.
Mikhail, возможно, я неправильно выразился, я имел в виду не запуск программы с помощью СкопированоAutoHotkey, командой СкопированоRun, C:\Путь\К\Программе.exe, , Hide, а именно ручной запуск, чтобы нужное окно "появилось" в скрытом режиме.
Цитата: Mikhail от 23.10.2025, 14:09В том предыдущем коде, приложение запускается основное(то есть тот что ждет процесс) сразу скрытно, далее запускает приложение так же скрытно, если ты откроешь приложение и закроешь его, а не свернешь, значок приложение пропадает в трее и снова, если запустить, то запуск скрытого не будет.
Тут переделал, если тебе нужно было это:#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
В том предыдущем коде, приложение запускается основное(то есть тот что ждет процесс) сразу скрытно, далее запускает приложение так же скрытно, если ты откроешь приложение и закроешь его, а не свернешь, значок приложение пропадает в трее и снова, если запустить, то запуск скрытого не будет.
Тут переделал, если тебе нужно было это:
#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
Цитата: Имир от 23.10.2025, 14:31Mikhail, работает, но не со всеми окнами, так как если приложение имеет другие окна, то иконка остаётся в трее после закрытия заданного окна. Поэтому я и изменил/упростил ваш скрипт, чтобы он читал только название окна. Тогда всё работает корректно: иконка появляется при открытии окна, при скрытии не исчезает, и исчезает только при закрытии окна. А скрытие окна сейчас сработало, но лишь один раз. При повторном открытии окна не работает
Mikhail, работает, но не со всеми окнами, так как если приложение имеет другие окна, то иконка остаётся в трее после закрытия заданного окна. Поэтому я и изменил/упростил ваш скрипт, чтобы он читал только название окна. Тогда всё работает корректно: иконка появляется при открытии окна, при скрытии не исчезает, и исчезает только при закрытии окна. А скрытие окна сейчас сработало, но лишь один раз. При повторном открытии окна не работает
Цитата: Имир от 23.10.2025, 14:47Mikhail, я так понял, что всё зависит от скорости запуска приложения. Судя по всему, нужна задержка
Sleep, тогда всё работает корректно, проверил на разных приложениях
Mikhail, я так понял, что всё зависит от скорости запуска приложения. Судя по всему, нужна задержка СкопированоSleep, тогда всё работает корректно, проверил на разных приложениях
Цитата: Имир от 23.10.2025, 15:00Mikhail, думаю, пока оставлю такую комбинацию. Вроде бы на всех окнах работает. Спасибо огромное за помощь! На сегодняшний день это лучшее решение для сворачивания в трей любых окон!
Loop { WinWait, %WinTitle% Menu, Tray, Icon Sleep 2000 WinHide, %WinTitle% WinWaitClose, %WinTitle% Menu, Tray, NoIcon } return
Mikhail, думаю, пока оставлю такую комбинацию. Вроде бы на всех окнах работает. Спасибо огромное за помощь! На сегодняшний день это лучшее решение для сворачивания в трей любых окон!
Loop {
WinWait, %WinTitle%
Menu, Tray, Icon
Sleep 2000
WinHide, %WinTitle%
WinWaitClose, %WinTitle%
Menu, Tray, NoIcon
}
return
Цитата: Имир от 24.10.2025, 09:16Mikhail, доброе утро! Извините, вопрос не по теме: подскажите, пожалуйста, а может ли
AutoHotkeyопределить какой именно файл запущен в программе и запустить его заново, если он был закрыт? Я знаю, что естьGoneIn60s, но это не то, так как она всего лишь восстанавливает скрытые окна, а не запускает их заново
Mikhail, доброе утро! Извините, вопрос не по теме: подскажите, пожалуйста, а может ли СкопированоAutoHotkey определить какой именно файл запущен в программе и запустить его заново, если он был закрыт? Я знаю, что есть СкопированоGoneIn60s, но это не то, так как она всего лишь восстанавливает скрытые окна, а не запускает их заново
Цитата: Mikhail от 24.10.2025, 10:24Имир, Привет.
Можно, сохранить путь до файла куда нить например, отследить и т.д., ну это надо тестить смотреть.
Имир, Привет.
Можно, сохранить путь до файла куда нить например, отследить и т.д., ну это надо тестить смотреть.