Spec-Zone.ru › Tcl/Tk

send

Имя
send — Выполнить команду в другом приложении
Синтаксис
Описание
-async
-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API