Яндекс.Метрика

ControlGetText -Autohotkey

Считывает текст из контрола (элемента управления в окне).

Считывает текст из контрола (элемента управления в окне).

ControlGetText, OutputVar [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

Параметры

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

Чтобы указать контрол через его HWND (window handle, идентификатор окна), оставьте параметр Control пустым и задайте ahk_id %ControlHwnd% как значение параметра WinTitle - это работает также и для скрытых контролов, даже если обнаружение скрытых окон (команда DetectHiddenWindows) не включено. HWND, как правило, узнаётся через команды ControlGet Hwnd, MouseGetPos или DllCall.
WinTitle Заголовок или часть заголовка окна (параметры поиска можно задавать командой SetTitleMatchMode). Если этот и следующие 3 параметра опущены, будет использовано последнее найденное окно. Если параметр задан буквой А и следующие 3 параметра опущены, будет использовано активное окно. Чтобы задать окно через его класс, используйте конструкцию ahk_class ТочноеИмяКласса (можно посмотреть программой Window Spy). Чтобы использовать идентификатор процесса (PID), задайте параметр как ahk_pid %ПеременнаяСодержащаяPID%. Чтобы использовать группу окон, задайте параметр как ahk_group ИмяГруппы. Чтобы использовать идентификатор окна, задайте параметр как ahk_id %ПеременнаяСодержащаяID%. Сектор поиска можно сузить, задав несколько критериев, например, My File.txt ahk_class Notepad.
WinText Подстрока из одиночного текстового элемента окна (можно посмотреть программой Window Spy). Скрытые текстовые элементы определяются, если включено определение скрытого текста (команда DetectHiddenText).
ExcludeTitle Окна, чей заголовок включает значение этого параметра, исключаются.
ExcludeText Окна, чей текст включает значение этого параметра, исключаются.

ErrorLevel

Нуль, если команда выполнена успешно. Иначе 1.

Примечания

Чтобы считать текст из контролов ListView, ListBox или ComboBox, используйте команду ControlGet List.

Если считанный текст оказывается обрезанным (неполным), попробуйте использовать команду VarSetCapacity перед выполнением ControlGetText. Эта команда позволит увеличить ёмкость выходной переменной. Например, VarSetCapacity(OutputVar, 55). Замените 55 (байт) на размер, который наверняка больше, чем считываемый текст. Это бывает необходимо, т.к. некоторые приложения не отвечают правильно на сообщение WM_GETTEXTLENGTH, из-за чего AutoHotkey задаёт слишком малый размер выходной переменной.

Максимальный размер считываемого текста зависит от максимальной ёмкости переменных, которая может быть изменена директивой #MaxMem. В результате может заниматься большое количество оперативной памяти, если указанный контрол (например, редактор, в котором открыт большой документ) содержит текст большого объёма. Однако память, занятая под переменную, может быть освобождена после использования путём присвоения переменной пустого значения: OutputVar =

Текст, считанный из большинства контролов, будет иметь в концах строк возврат каретки и перевод строки (`r`n), а не один только перевод строки (`n).

Использование команды SetTitleMatchMode Slow излишне, т.к. ControlGetText всегда использует медленный (slow) метод (что позволяет ему работать в более широком диапазоне разных типов контролов).

Чтобы считать список всех контролов окна, используйте команду WinGet.

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

Пример

ControlGetText, OutputVar, Edit1, Безымянный - Блокнот
Теги страницы: