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

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

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

Оригинал статьи в AutoHotkey.chm: "WinGet", в содержании - "Window Management" - "WinGet", v1.0.46.07.

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

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

WinGet

Возвращает идентификатор окна, идентификатор его процесса, имя процесса, список элементов управления окна, список всех окон, отвечающих заданным критериям.

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]

Параметры

OutputVar Имя переменной, куда будет помещён результат.
Cmd Смотрите список ниже.
WinTitle Заголовок или часть заголовка окна (метод поиска можно задавать командой SetTitleMatchMode). Если этот и следующие 3 параметра опущены, будет использовано последнее найденное окно. Чтобы задать окно через его класс, используйте конструкцию ahk_class ТочноеИмяКласса (можно посмотреть программой Window Spy). Чтобы использовать идентификатор процесса (PID), задайте параметр как ahk_pid %ПеременнаяСодержащаяPID%. Чтобы использовать идентификатор окна, задайте параметр как ahk_id %ПеременнаяСодержащаяID%.
WinText Подстрока из одиночного текстового элемента окна (можно посмотреть программой Window Spy). Скрытые текстовые элементы определяются, если включено определение скрытого текста (команда DetectHiddenText).
ExcludeTitle Окна, чей заголовок включает значение этого параметра, исключаются.
ExcludeText Окна, чей текст включает значение этого параметра, исключаются.

Cmd задаёт выполняемую операцию. Значение по умолчанию - ID. Ниже перечислены возможные значения.

ID. Bозвращает уникальный идентификационный номер (HWND/handle) окна. Если окна, подходящего под указанные параметры, нет, выходная переменная будет пустой. Функции WinExist() и WinActive() также могут быть использованы для определения идентификатора окна. Например, WinExist("A") - быстрый способ узнать ID активного окна. Чтобы узнать HWND элемента управления (для последующего использования с Post/SendMessage или DllCall) воспользуйтесь командами ControlGet Hwnd или MouseGetPos.

IDLast. То же, что выше, но будет возвращён идентификатор самого нижнего из совпадающих с критериями окон. Если подходящее окно только одно, действует идентично ID. Это то же правило, по которому действует команда WinActivateBottom.

PID. Возвращает идентификатор процесса, которому принадлежит окно.

ProcessName. Определяет имя процесса (например, notepad.exe).

Count. Возвращает число существующих окон, подходящих под параметры WinTitle, WinText, ExcludeTitle и ExcludeText (вернёт 0, если таких нет). Чтобы пересчитать вообще все существующие окна, опустите все эти параметры. Скрытые окна считаются, если включено определение скрытых окон (команда DetectHiddenWindows).

List. Возвращает ID всех существующих окон, подходящих под параметры WinTitle, WinText, ExcludeTitle и ExcludeText. Чтобы получить список вообще всех существующих окон, опустите все эти параметры. Каждый идентификатор сохраняется в элементе массива, имя элемента начинается с имени выходной переменной. В саму выходную переменную помещается число найденных окон (0, если не найдено ни одного). Например, если переменная названа MyArray и было найдено два окна, MyArray1 будет содержать ID первого окна, MyArray2 - второго, а сама MyArray - число 2. Окна перечисляются в порядке от верхнего к нижнему (согласно с их расположением на рабочем столе). Скрытые окна учитываются, только если включено определение скрытых окон (команда DetectHiddenWindows). Если команда применяется внутри функции, но нужно, чтобы выходной массив был глобальным, объявите MyArray как глобальную переменную до выполнения команды (обратное верно для функций, где все переменные глобальны по умолчанию, а массив должен быть локальным).

MinMax. Определяет состояние окна (свёрнуто/развёрнуто). Выходная переменная пуста, если окно не найдено; иначе принимает одно из следующих значений:

-1 Окно свёрнуто (WinRestore восстановит его).

1 Окно развёрнуто (WinRestore восстановит его).

0 Окно не свёрнуто и не развёрнуто.

ControlList. Возвращает имена всех элементов управления окна. Если подходящего окна не найдено или оно не содержит элементов управления, выходная переменная будет пустой. Иначе каждое имя состоит из имени класса элемента и его порядкового номера (ClassNN), так же, как это показывает программа Window Spy.

Каждая строка списка, кроме последней, оканчивается переводом строки (`n). Для просмотра имён элементов управления по одному используйте цикл разбора, как показано в разделе с примерами ниже.

Элементы перечисляются в Z-порядке, обычно в том же порядке происходит переход между ними по нажатию клавиши TAB, если окно поддерживает такую навигацию.

Элемент управления, находящийся под курсором мыши, может распознаваться командой MouseGetPos.

ControlListHwnd [v1.0.43.06+]. То же, что выше, с тем отличием, что возвращаются оконные идентификаторы (HWND/handle) элементов управления, а не их имена (ClassNN).

Transparent. Возвращает степень прозрачности окна (задать прозрачность можно командой WinSet). Выходная переменная будет пустой, если: 1) операционная система более старая, чем Windows XP; 2) не найдено окон, подходящих под параметры; 3) уровень прозрачности для окна не задан; 4) другие причины (вызванные действиями операционной системы) - например, окно было свёрнуто, восстановлено и/или был изменён его размер после того, как оно было сделано прозрачным. Иначе в переменную будет помещено число от 0 до 255; 0 означает невидимое окно, 255 - полностью видимое. Пример:

MouseGetPos,,, MouseWin
WinGet, Transparent, Transparent, ahk_id %MouseWin% ; Прозрачность окна под курсором мыши.

TransColor. Возвращает цвет, который в окне задан как прозрачный (задаётся командой WinSet). Выходная переменная будет пустой, если: 1) операционная система более старая, чем Windows XP; 2) не найдено окон, подходящих под параметры; 3) окно не имеет прозрачного цвета; 4) другие причины (вызванные действиями операционной системы) - например, окно было свёрнуто, восстановлено и/или был изменён его размер после того, как оно было сделано прозрачным. Иначе в переменную будет помещено 6-значное шестнадцатеричное число, обозначающее цвет в формате RGB (красный-зелёный-синий), например, 0x00CC99. Пример:

MouseGetPos,,, MouseWin
WinGet, TransColor, TransColor, ahk_id %MouseWin% ; Прозрачный цвет у окна под курсором мыши.

Style или ExStyle. Возвращает 8-значное шестнадцатеричное число, представляющее стиль или расширенный стиль окна. Если окон, подходящих под параметры, не найдено, выходная переменная будет пустой. Следующий пример определяет, имеет ли окно стиль WS_DISABLED:

WinGet, Style, Style, My Window Title
if (Style & 0x8000000) ; 0x8000000 означает WS_DISABLED.
  ... далее следуют действия на случай, если окно имеет этот стиль.

Следующий пример определяет, имеет ли окно стиль WS_EX_TOPMOST (поверх всех окон):

WinGet, ExStyle, ExStyle, My Window Title
if (ExStyle & 0x8) ; 0x8 означает WS_EX_TOPMOST.
  ... далее следуют действия на случай, если окно имеет этот стиль.

Смотрите список некоторых стилей в статье "Стили, используемые командами Gui и GuiControl" ("Styles Usable by the Gui and GuiControl Commands").

Примечания

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

Номера идентификаторов возвращаются этой командой в виде чисел (префикс "ahk_id" не включается) и сохраняются в шестнадцатеричном формате независимо от настроек, устанавливаемых командой SetFormat.

Идентификатор окна под курсором мыши можно узнать через команду MouseGetPos.

Хотя в данное время идентификаторы являются 32-битными числами без указания знака, в будущих версиях они могут стать 64-битными. Поэтому небезопасно совершать над ними числовые операции, такие как сложение, т.к. такие операции требуют, чтобы их входные строки могли быть интерпретированы как числа со знаком.

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

Примеры

; Пример №1: Развернуть активное окно и показать его ID:
WinGet, active_id, ID, A
WinMaximize, ahk_id %active_id%
MsgBox, Идентификатор активного окна "%active_id%".

; Пример №2: Этот пример обойдёт все окна в системе и покажет информацию о каждом из них:
WinGet, id, list,,, Program Manager
Loop, %id%
{
    this_id := id%A_Index%
    WinActivate, ahk_id %this_id%
    WinGetClass, this_class, ahk_id %this_id%
    WinGetTitle, this_title, ahk_id %this_id%
    MsgBox, 4, 
    , Обход всех окон`n`n%a_index% из %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n`nПродолжить?
    IfMsgBox, NO, break
}

; Пример №3: Извлекает имя каждого элемента управления активного окна из их списка:
WinGet, ActiveControlList, ControlList, A
Loop, Parse, ActiveControlList, `n
{
    MsgBox, 4,, Элемент управления №%a_index%: "%A_LoopField%". Продолжить?
    IfMsgBox, No
        break
}

; Пример №4: Показывает в реальном времени список элементов управления активного окна:
#Persistent
SetTimer, WatchActiveWindow, 200
return
WatchActiveWindow:
WinGet, ControlList, ControlList, A
ToolTip, %ControlList%
return

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

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