send
-
Имя
- send — Выполнить команду в другом приложении
- Синтаксис
- Описание
-
-async
- -displayof pathName
- --
- -displayof pathName
- Имена приложений
- Отключение отправки команд
- Безопасность
- Пример
- Ключевые слова
Имя
send — Выполнить команду в другом приложенииСинтаксис
send ?options? app cmd ?arg arg ...?Описание
Эта команда организует выполнение cmd (и arg) в приложении с именем app. Она возвращает результат или ошибку выполнения этой команды. App может быть именем любого приложения, основное окно которого находится на экране, содержащем основное окно отправителя; оно не обязательно должно находиться в одном процессе. Если аргументы arg отсутствуют, то команда для выполнения содержится полностью в аргументе cmd. Если присутствует один или несколько аргументов arg, они конкатенируются для формирования команды для выполнения, точно так же, как и для команды eval.Если начальные аргументы команды начинаются с «-», они обрабатываются как параметры. В настоящее время определены следующие параметры:
- -async
- Запрашивает асинхронное вызов. В этом случае команда send завершится немедленно, не дожидаясь завершения cmd в целевом приложении; результат недоступен, и ошибки в отправленной команде игнорируются. Если целевое приложение находится в том же процессе, что и приложение-отправитель, то параметр -async игнорируется.
- -displayof pathName
- Указывает, что главное окно целевого приложения находится на экране окна, заданного pathName, вместо экрана, содержащего главное окно приложения.
- --
- Не выполняет никаких действий, кроме завершения списка опций. Этот параметр необходим только в том случае, если app может содержать ведущий символ «-».
Имена приложений
Имя приложения изначально устанавливается из имени программы или скрипта, создавшего приложение. Вы можете запросить и изменить имя приложения с помощью команды tk appname.Отключение отправки команд
Если команда send удалена из приложения (например, с помощью команды rename send {}), то приложение больше не будет реагировать на входящие запросы отправки, а также не сможет отправлять исходящие запросы. Связь можно восстановить, вызвав команду tk appname.Безопасность
Команда send потенциально является серьезной уязвимостью безопасности. В Unix любое приложение, которое может подключиться к вашему серверу X, может отправлять скрипты в ваши приложения. Эти входящие скрипты могут использовать Tcl для чтения и записи ваших файлов и вызывать подпроцессы от вашего имени. Базовый контроль доступа, такой как предоставляемый командой xhost, особенно небезопасен, так как позволяет любому пользователю с учетной записью на определенных хостах подключаться к вашему серверу, а при отключении позволяет любому подключиться к вашему серверу. Для обеспечения хотя бы небольшого уровня безопасности Tk проверяет используемый сервером контроль доступа и отклоняет входящие отправки, если (а) контроль доступа в стиле xhost включен (т.е. только определенные хосты могут установить соединения) и (б) список включенных хостов пуст. Это означает, что приложения не могут подключиться к вашему серверу, если они не используют какой-либо другой вид авторизации, такой как предоставляемый xauth. В Windows команда send в настоящее время отключена. Большая часть функциональности предоставляется командой dde.Пример
Этот фрагмент скрипта может использоваться для создания приложения, которое выполняется только один раз на определенном экране.if {[tk appname FoobarApp] ne "FoobarApp"} {
send -async FoobarApp RemoteStart $argv
exit
}
# The command that will be called remotely, which raises
# the application main window and opens the requested files
proc RemoteStart args {
raise .
foreach filename $args {
OpenFile $filename
}
}
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/send.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/send.htm