Описание функции


ControlSend

Высылает строку символов в элемент.

ControlSend('title','text',controlID,'string'[,flag=0])

Параметры

title Заголовок/дескриптор/класс окна. См. заголовки и текст окон.
text Текст окна.
controlID Идентификатор элемента управления. См. элементы управления.
string Строка символов, высылаемая в элемент.
flag [необязательный] Изменить интерпретацию клавиш:
0 - (по умолчанию), Текст содержит специальные символы, такие как + указывающие на SHIFT и {LEFT} указывающие на "стрелку влево".
1 - клавиши как есть.

Возвращаемое значение

Успех:Возвращает 1.
Ошибка:Возвращает 0, если окно/элемент не найден.

Примечания

ControlSend() работает аналогично Send(), но в отличии от последней может отправлять клавиши непосредственно окну/элементу, а не только активному окну.

ControlSend() ненадёжна только для консольных приложений, которые работают иначе, чем обычные окна (видимо проверяется физическое состояние, а не приём сообщений нажатых клавиш). Для обычных окон ControlSend() должна быть более надёжна, чем команда Send(), и подобно ей также высылает Shift, Ctrl, Alt и т.д.

Как уже упоминалось в справке функции Send(), клавиши, которые высылают различные символы при CAPS LOCK и использовании клавиши Shift не могут быть эмулированы. Например, Чешская клавиатура. Хорошим решением будет ControlSetText().

Элементам возможно в первую очередь понадобится указать фокус командой ControlFocus(), при обращении к элементам (controlID), созданным самим скриптом.

Opt('SendKeyDelay',...) изменяет продолжительность паузы между эмулированными нажатиями клавиш.
Opt('SendKeyDownDelay',...) изменяет продолжительность нажатого состояния клавиши, перед тем как отпустить.

Функцию можно подключить через команду exect
Для передачи пустой строки можно воспользоваться ключевым словом Null

См. также

ControlCommand, Send, ControlSetText, ControlFocus, SendKeyDelay (Опция), SendKeyDownDelay (Опция)

Примеры:
 Как создать кнопку?


exect=ControlSend('Безымянный~~~~Блокнот',Null,'Edit1','привет') ;; вставляет текст "привет" в окно "Блокнота" (он должен быть запущен, может быть свёрнут)

exect=$var_h=WinActivate('Безымянный~~~~Блокнот')||ControlSend(Eval('var_h'),Null,'[CLASS:Edit;INSTANCE:1]','Это~~некоторый~~текст') ;; активирует окно "Блокнота" и вставляет заданный текст (он должен быть запущен)

tcimg=$cm498 pause=500 exect=ControlSend('[CLASS:TBUTTONCHANGEDLG]',Null,'TAltEdit1','+{INSERT}',0) ;; вызвать панель инструментов и ввести текст из буфера обмена в поле "Подсказка" (TC x32)

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','привет') ;; запустить "Блокнот", дождаться активизации и ввести слово "привет"

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','закройте~~окно')||WinWaitClose(Eval('var_h'))||MsgBox(4096,Null,'окно~~закрыто') ;; запустить "Блокнот", дождаться закрытие окна пользователем

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','сверните~~окно')||WinWaitNotActive(Eval('var_h'))||MsgBox(4096,Null,'окно~~не~~активно') ;; запустить "Блокнот", дождаться когда окно не будет активным

exect=ControlSend('[CLASS:Progman]','''','''','{F5}') ;; обновить рабочий стол


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru