Spec-Zone.ru › Tcl/Tk

dde

NAME
dde — Выполнить команду Dynamic Data Exchange
SYNOPSIS
DESCRIPTION
DDE COMMANDS
dde servername ?-force? ?-handler proc? ?--? ?topic?
dde execute ?-async? ?-binary? service topic data
dde poke ?-binary? service topic item data
dde request ?-binary? service topic item
dde services service topic
dde eval ?-async? topic cmd ?arg arg ...?
DDE AND TCL
EXAMPLE
SEE ALSO
KEYWORDS

Имя

dde — Выполнить команду Dynamic Data Exchange

Синтаксис

package require dde 1.4
dde servername ?-force? ?-handler proc? ?--? ?topic?
dde execute ?-async? ?-binary? service topic data
dde poke ?-binary? service topic item data
dde request ?-binary? service topic item
dde services service topic
dde eval ?-async? topic cmd ?arg arg ...?

Описание

Эта команда позволяет приложению отправлять команду Dynamic Data Exchange (DDE), когда оно выполняется под управлением Microsoft Windows. Dynamic Data Exchange — это механизм, с помощью которого приложения могут обмениваться сырыми данными. Каждый обмен DDE требует имя службы и тему. Имя службы и тема определяются приложением; Tcl использует имя службы TclEval, а имя темы — это имя интерпретатора, указанное в команде dde servername. Другие приложения имеют свои собственные имена служб и темы. Например, Microsoft Excel имеет имя службы Excel.

Команды dde

Следующие команды являются подмножеством полного набора команд Dynamic Data Exchange.
dde servername ?-force? ?-handler proc? ?--? ?topic?
dde servername регистрирует интерпретатор в качестве сервера DDE со службой TclEval и именем темы, заданным в topic. Если topic не указан, dde servername возвращает имя текущей темы или пустую строку, если она не зарегистрирована в качестве службы. Если заданное имя topic уже используется, к имени добавляется суффикс вида « #2» или « #3», чтобы сделать его уникальным. Результатом команды будет фактически используемое имя. Опция -force используется для принудительной регистрации заданного имени topic.

Опция -handler указывает процедуру Tcl, которая будет вызываться для обработки вызовов сервера dde. Если пакет загружен в безопасный интерпретатор, процедура -handler должна быть определена. Процедура вызывается со всеми аргументами, предоставленными удалённым вызовом.

dde execute ?-async? ?-binary? service topic data
dde execute получает data и отправляет его на сервер, указанный в service, с темой, указанной в topic. Обычно service — это имя приложения, а topic — это файл для обработки. Поле data передаётся удалённому приложению. Обычно приложение обрабатывает поле data как скрипт, а скрипт выполняется в приложении. Опция -async запрашивает асинхронное выполнение. Команда возвращает сообщение об ошибке, если скрипт не был выполнен, если не была использована опция -async, в этом случае команда возвращается немедленно без ошибки. Без опции -binary все данные будут отправлены в кодировке unicode. Для клиентов DDE, которые не реализуют формат буфера обмена CF_UNICODE, это будет автоматически преобразовано в кодировку системы. Вы можете использовать опцию -binary в сочетании с результатом encoding convertto, чтобы отправлять данные в любой другой кодировке.
dde poke ?-binary? service topic item data
dde poke передаёт data на сервер, указанный в service, используя topic и item. Обычно service — это имя приложения, topic — специфический для приложения, но может быть командой серверу или именем обрабатываемого файла. item также специфичен для приложения и часто не используется, но он всегда должен быть непустым. Поле data передаётся удалённому приложению. Без опции -binary все данные будут отправлены в кодировке unicode. Для клиентов DDE, которые не реализуют формат буфера обмена CF_UNICODE, это будет автоматически преобразовано в кодировку системы. Вы можете использовать опцию -binary в сочетании с результатом encoding convertto, чтобы отправлять данные в любой другой кодировке.
dde request ?-binary? service topic item
dde request обычно используется для получения значения чего-либо; значения ячейки в Microsoft Excel или текста выделения в Microsoft Word. service обычно имя приложения, topic обычно имя файла, а item специфичен для приложения. Команда возвращает значение item, как определено в приложении. Обычно это интерпретируется как строка с завершающим нулём. Если указана опция -binary, результат возвращается как массив байтов.
dde services service topic
dde services возвращает список пар служба-тема, которые в настоящее время существуют в системе. Если service и topic обе пустые строки ({}), возвращаются все пары служба-тема, доступные в системе. Если service пусто, а topic нет, то возвращаются все службы с указанной темой. Если service не пусто, а topic есть, возвращаются все темы для данной службы. Если обе не пустые, если пара служба-тема в настоящее время существует, она возвращается; в противном случае возвращается пустая строка.
dde eval ?-async? topic cmd ?arg arg ...?
dde eval вычисляет команду и её аргументы, используя интерпретатор, указанный в topic. Служба DDE должна быть TclEval. Опция -async запрашивает асинхронное выполнение. Команда возвращает сообщение об ошибке, если скрипт не был выполнен, если не была использована опция -async, в этом случае команда возвращается немедленно без ошибки. Эта команда может быть использована для замены send в Windows.

Dde и tcl

Интерпретатор Tcl всегда имеет имя службы TclEval. Каждый интерпретатор во всех работающих приложениях Tcl должен иметь уникальное имя, заданное командой dde servername. Каждый интерпретатор доступен как тема DDE только в том случае, если команда dde servername использовалась для установки имени темы для каждого интерпретатора. Таким образом, команда dde services TclEval {} вернёт список пар служба-тема, где каждый из текущих интерпретаторов будет темой.

Когда Tcl обрабатывает команду dde execute, данные для execute выполняются как скрипт в интерпретаторе, названном темой команды dde execute.

Когда Tcl обрабатывает команду dde request, он возвращает значение переменной, указанной в команде dde, в контексте интерпретатора, названного темой dde. Tcl зарезервировал переменную $TCLEVAL$EXECUTE$RESULT для внутреннего использования, и команды dde request для этой переменной дадут непредсказуемые результаты.

Внешнее приложение, которое хочет выполнить скрипт в Tcl, должно сделать так, чтобы этот скрипт сохранил свой результат в переменную, выполнил команду dde execute, а затем выполнил dde request, чтобы получить значение переменной.

При использовании DDE следует быть внимательным, чтобы гарантировать, что очередь событий очищается с помощью либо update, либо vwait. Это происходит по умолчанию при использовании wish, если не вызывается блокирующая команда (например, exec без добавления & для помещения процесса в фоновый режим). Если по какой-либо причине очередь событий не очищается, команды DDE могут зависнуть, пока очередь событий не очистится. Это может привести к тупиковой ситуации.

Пример

Это запрос к Internet Explorer (который должен уже работать) перейти на конкретный важный сайт:
package require dde
dde execute -async iexplore WWW_OpenURL http://www.tcl.tk/

См. также

tk, winfo, send

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/dde.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/dde.htm

Spec-Zone.ru

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