1 (изменено: embarcadero, 2011-07-21 17:23:50)

Тема: AHK: Разовое выполнение действий над окном при его создании

Здравствуйте.
Помогите, пожалуйста, разобраться, что не так в скрипте.
Скрипт должен при появлении окна калькулятора свернуть его.
При этом требуется выполнять сворачивание над каждым вновь появляющимся окном калькулятора, но только один раз.


; #NoTrayIcon

SetTimer, timer_MonitorWindows, 1000
return

timer_MonitorWindows:
WinGet, wid_list, List, ahk_class SciCalc
Loop, %wid_list%
{
    wid := wid_list%A_Index%
    if ( ! (proc[%wid%]) )
    {
        proc[%wid%] := true
        WinActivate, ahk_id %wid%
        Send, !{SPACE} {DOWN 3} {ENTER}
    }
}
Return

^!0::
MsgBox Скрипт "Калькулятор" будет завершён.
ExitApp
return

Плоблема скрипта в зацикливании: скрипт сворачивает окно калькулятора потом восстанавливает и вновь сворачивает и так бесконечно.


P.S.: Пример - тестовый, взят вот отсюда:
http://www.script-coding.com/AutoHotkey/AhkWin.html

2

Re: AHK: Разовое выполнение действий над окном при его создании

Сразу замечу, что информативность заголовка темы нулевая. Отредактируйте его так, чтобы он отражал суть.

embarcadero пишет:

Скрипт должен при появлении окна калькулятора свернуть его.

Loop
{
WinWait, Калькулятор 
WinMinimize, Калькулятор 
}

3

Re: AHK: Разовое выполнение действий над окном при его создании

Попробуйте это

f1::
loop
{
winwait, ahk_class SciCalc
WinGet, wid_list, List, ahk_class SciCalc
loop, %wid_list%
{
w := wid_list%A_Index%
WinGet, wid, minmax, ahk_id %w%
if wid = 0
{
WinMinimize, ahk_id %w%
}
}
}
return

Единственно что после активации вам не удастся развернуть окна калькуляторов, для этого можно еще добавить паузу для скрипта по нажатию средней кнопки мыши, ещё раз нажать и окна снова начнут сворачиваться

MButton::
Pause
return

4 (изменено: embarcadero, 2011-07-21 17:19:07)

Re: AHK: Разовое выполнение действий над окном при его создании

Проблема состоит в следующем: окну должна посылаться определенная команда, но только один раз: при его создании.

Зачем это нужно: я пользуюсь программой Hydravision (входит в комплект Catalist Control Centre).
Данная программа создает сетку на рабочем столе (делит его на области)
При этом в контекстное меню заголовка любого окна добавляется новая команда: "Прикрепить к сетке".
Каждый раз когда я запускаю любое приложение (браузер, текстовый редактор, проводник и т.д.) я вынужден кликать правой кнопкой по заголовку окна и выбирать команду "Прикрепить к сетке".
Мне нужно, чтобы все(!!!) приложения запускались уже прикрепленными к сетке (развернутыми в определенной области экрана), но пока что я тестирую скрипт только на калькуляторе, к тому же использую вместо "Прикрепить к сетке" команду "Свернуть", потому как тестирую скрипт на другой машине, где гидрагрид не установлен.

Решение. Самый простой способ который я нашел это послать окну после его создания сочетание клавиш
"ALT + SPACE " далее стрелочками выбираем нужную команду и нажимаем ENTER
(есть еще способ с помощью функции PostMessage)

Предпоследний скрипт не подходит:

Loop
{
WinWait, Калькулятор 
WinMinimize, Калькулятор 
}

так как сворачивает калькулятор постоянно, а нужно чтобы только 1 раз при создании окна.

Последний скрипт тоже не подходит, т.к. если используется loop, то нужно отслеживать к каким окнам команда уже применялась и не применять ее второй раз. В исходном (моем) скрипте хэндлы окон запоминаются в переменной proc, но почему-то скрипт не работает должным образом.

P.S. Подскажите, где можно поменять название темы на  "Разовое выполнение команды при создании нового окна" чтобы было более информативным?

5

Re: AHK: Разовое выполнение действий над окном при его создании

embarcadero пишет:

P.S. Подскажите, где можно поменять название темы на  "Разовое выполнение команды при создании нового окна" чтобы было более информативным?

Редактируя первый пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Разовое выполнение действий над окном при его создании

teadrinker пишет:
embarcadero пишет:

P.S. Подскажите, где можно поменять название темы на  "Разовое выполнение команды при создании нового окна" чтобы было более информативным?

Редактируя первый пост.

спасибо