Перейти на главную страничку сайта (список статей, файлы для скачивания)
Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.
Оригинал статьи в AutoHotkey.chm: "ControlGetFocus", в содержании - "Window Management" - "Controls" - "ControlGetFocus", v1.0.46.03.
Ник переводчика: YMP.
Настоящее имя переводчика: Юрий Попов.
Определяет, на каком контроле (элементе управления) указанного окна находится фокус ввода.
ControlGetFocus, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]
OutputVar | Имя выходной переменной, куда будет помещён идентификатор контрола, состоящий из имени его класса и порядкового номера в окне. Например, Button12. |
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 | Окна, чей текст включает значение этого параметра, исключаются. |
Нуль, если удалось определить контрол. Иначе (например, если указанное окно не существует или ни один из его контролов не имеет фокуса ввода) равен 1.
Эта команда определяет контрол, на котором находится фокус клавиатурного ввода, т.е. тот, куда будут посылаться нажатия клавиш, если пользователь будет что-то печатать.
Указанное окно должно быть активным, чтобы иметь контрол с фокусом. Если окно не активно, выходная переменная будет пустой.
Если команда ControlGetFocus выполняется циклически с высокой частотой (например, каждые 500 мс или чаще), это, вероятно, будет мешать выполнению пользователем двойного щелчка мыши. Один из обходных путей - вызов функции GetGUIThreadInfo() через команду DllCall. Например:
; Этот скрипт определяет ahk_id (HWND) контрола с фокусом в активном окне. ; Скрипт требует Windows 98 и выше или NT 4.0 SP3 и выше. GuiThreadInfoSize = 48 VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize) InsertInteger(GuiThreadInfoSize, GuiThreadInfo, 0) if not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo) { MsgBox Функция GetGUIThreadInfo() сообщает о неудаче. return } FocusedHWND := ExtractInteger(GuiThreadInfo, 12) ; Считать поле структуры, содержащее HWND контрола с фокусом. MsgBox % "HWND контрола с фокусом " . FocusedHWND InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) { Loop %pSize% DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1 , "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF) } ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4) { Loop %pSize% result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1) if (!pIsSigned OR pSize > 4 OR result < 0x80000000) return result return -(0xFFFFFFFF - result + 1) } ; Этот HWND может использоваться во всех командах для контролов. ; Например, команда ниже считывает текст из контрола, имеющего фокус. ; ControlGetText, OutputVar,, ahk_id %FocusedHWND%
Заголовки и текст окон чувствительны к регистру. Скрытые окна не определяются, если это не задано командой DetectHiddenWindows.
ControlGetFocus, OutputVar, Безымянный - Блокнот if ErrorLevel MsgBox, Указанное окно не существует либо ни один из его контролов не имеет фокуса ввода. else MsgBox, Контрол с фокусом = %OutputVar%
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.