Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "The «Last Found» Window", по ссылке из статьи "IfWinActive / IfWinNotActive", в содержании - "Window Management" - "IfWinActive/IfWinNotActive", v1.0.46.07.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

Последнее найденное окно и параметр WinTitle

Последнее найденное окно

Это самое последнее по времени окно, найденное командами IfWin[Not]Exist, IfWin[Not]Active, WinWait[Not]Active или WinWait. Наличие такого "окна по умолчанию" упрощает код скрипта, т.к. делает ненужным повторение параметров WinTitle и WinText для каждой оконной команды. Вдобавок улучшается производительность скрипта, поскольку ему не нужно искать окно снова и снова.

Последнее найденное окно может использоваться всеми оконными командами, кроме WinWait, WinActivateBottom и GroupAdd. Чтобы использовать его, просто опускайте все 4 параметра (WinTitle, WinText, ExcludeTitle и ExcludeText).

Каждый поток скрипта сохраняет своё собственное значение для последнего найденного окна, т.е. если поток прерван (приостановлен) другим потоком, то по его возобновлении его последнее найденное окно будет тем же, что и до прерывания (а не тем, которое было у прервавшего его потока).

Если последним найденным окном является скрытое окно Gui, оно может быть использовано, даже если отключено обнаружение скрытых окон (команда DetectHiddenWindows). Это часто используется в сочетании с командой Gui +LastFound.

Примеры

Run Notepad
WinWait Безымянный - Блокнот
WinActivate ; Использует окно, найденное выше.

IfWinExist, Безымянный - Блокнот
{
    WinActivate ; Использует окно, найденное выше.
    WinMaximize ; То же.
    Send, Some text.{Enter}
    return
}

IfWinNotExist, Калькулятор
    return
else
{
    WinActivate ; Использует последнее найденное окно, установленное IfWinNotExist выше.
    WinMove, 40, 40 ; Передвигает его в другое место.
    return
}

Способы задания параметра WinTitle

Если несколько окон удовлетворяют условиям, заданным параметрами WinTitle или WinText какой-либо оконной команды, используется самое верхнее из них. Например, если указанным критериям отвечает активное окно, оно и будет использовано, даже если ниже его есть окна, также отвечающие этим критериям.

Активное окно (А): почти все оконные команды могут работать с активным окном, если задать параметр WinTitle буквой А и опустить параметры WinText, ExcludeTitle и ExcludeText. В следующем примере комбинация Win-Стрелка вверх становится горячей клавишей, разворачивающей активное окно: #Up::WinMaximize A

Класс окна (ahk_class): все оконные команды могут находить окна по их классу, который можно посмотреть программой Window Spy или получить через команду WinGetClass. В следующем примере активируется двухпанельное окно Проводника: WinActivate ahk_class ExploreWClass

Уникальный идентификатор/HWND (ahk_id): все оконные команды могут работать с окном или его элементами управления, используя их уникальный идентификационный номер. Например: WinActivate ahk_id %ПеременнаяСодержащаяID%. Идентификатор окна можно узнать через WinExist() или WinGet. Идентификатор элемента управления - через ControlGet Hwnd, MouseGetPos, или DllCall (с версии 1.0.40.05 через ahk_id можно работать также и со скрытыми элементами управления, даже если обнаружение скрытых окон не было включено командой DetectHiddenWindows).

Идентификатор процесса/PID (ahk_pid): все оконные команды могут работать с окнами через идентификатор процесса, которому принадлежат эти окна. Например, команда WinClose ahk_pid %ПеременнаяСодержащаяPID% закроет верхнее окно процесса. PID можно узнать командами WinGet, Run или Process.

Оконная группа (ahk_group): все оконные команды могут работать с окнами, входящими в группу, если задать параметр WinTitle как ahk_group ИмяГруппы. Команды WinMinimize, WinMaximize, WinRestore, WinHide, WinShow, WinClose и WinKill действуют на все окна группы. Напротив, такие команды, как WinActivate и IfWinExist работают с верхним окном группы.

Несколько критериев (с версии 1.0.36.02): в отличие от ahk_group в предыдущем параграфе, расширяющего область поиска, задание в WinTitle сразу нескольких критериев позволяет сузить поиск. В следующем примере скрипт будет ожидать появления окна, чей заголовок включает My File.txt и чей класс Notepad:

WinWait My File.txt ahk_class Notepad
WinActivate ; Активировать найденное окно.

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

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.