dde(n) Tcl Bundled Packages dde(n)
NAME
dde - Execute a Dynamic Data Exchange command
SYNOPSISpackagerequiredde1.2ddeeval ?-async? servicecmd ?arg...?
ddeexecute ?-async? servicetopicdataddepokeservicetopicitemdatadderequest ?-binary? servicetopicdataddeservername ?topic?
ddeservicesservicetopicDESCRIPTION
This command allows an application to send Dynamic Data Exchange (DDE)
command when running under Microsoft Windows. Dynamic Data Exchange is
a mechanism where applications can exchange raw data. Each DDE transac-
tion needs a servicename and a topic. Both the servicename and topic
are application defined; Tcl uses the service name TclEval, while the
topic name is the name of the interpreter given by ddeservername.
Other applications have their own servicenames and topics. For
instance, Microsoft Excel has the service name Excel.
The eval and execute commands accept the option -async:
DDECOMMANDS
The following commands are a subset of the full Dynamic Data Exchange
set of commands.
ddeservername ?topic?
ddeservername registers the interpreter as a DDE server with
the service name TclEval and the topic name specified by topic.
If no topic is given, ddeservername returns the name of the
current topic or the empty string if it is not registered as a
service.
ddeexecute ?-async? servicetopicdataddeexecute takes the data and sends it to the server indicated
by service with the topic indicated by topic. Typically, service
is the name of an application, and topic is a file to work on.
The data field is given to the remote application. Typically,
the application treats the data field as a script, and the
script is run in the application. The -async option requests
asynchronous invocation. The command returns an error message
if the script did not run, unless the -async flag was used, in
which case the command returns immediately with no error.
ddepokeservicetopicitemdataddepoke passes the data to the server indicated by service
using the topic and item specified. Typically, service is the
name of an application. topic is application specific but can
be a command to the server or the name of a file to work on.
The item is also application specific and is often not used, but
it must always be non-null. The data field is given to the
remote application.
dderequest ?-binary? servicetopicitemdderequest is typically used to get the value of something; the
value of a cell in Microsoft Excel or the text of a selection in
Microsoft Word. service is typically the name of an application,
topic is typically the name of the file, and item is applica-
tion-specific. The command returns the value of item as defined
in the application. Normally this is interpreted to be a string
with terminating null. If -binary is specified, the result is
returned as a byte array.
ddeservicesservicetopicddeservices returns a list of service-topic pairs that cur-
rently exist on the machine. If service and topic are both null
strings ({}), then all service-topic pairs currently available
on the system are returned. If service is null and topic is not,
then all services with the specified topic are returned. If ser-vice is not null and topic is, all topics for a given service
are returned. If both are not null, if that service-topic pair
currently exists, it is returned; otherwise, null is returned.
ddeeval ?-async? topiccmd ?argarg...?
ddeeval evaluates a command and its arguments using the inter-
preter specified by topic. The DDE service must be the TclEval
service. The -async option requests asynchronous invocation.
The command returns an error message if the script did not run,
unless the -async flag was used, in which case the command
returns immediately with no error. This command can be used to
replace send on Windows.
DDEANDTCL
A Tcl interpreter always has a service name of TclEval. Each different
interpreter of all running Tcl applications must be given a unique name
specified by ddeservername. Each interp is available as a DDE topic
only if the ddeservername command was used to set the name of the
topic for each interp. So a ddeservicesTclEval{} command will return
a list of service-topic pairs, where each of the currently running
interps will be a topic.
When Tcl processes a ddeexecute command, the data for the execute is
run as a script in the interp named by the topic of the ddeexecute
command.
When Tcl processes a dderequest command, it returns the value of the
variable given in the dde command in the context of the interp named by
the dde topic. Tcl reserves the variable $TCLEVAL$EXECUTE$RESULT for
internal use, and dderequest commands for that variable will give
unpredictable results.
An external application which wishes to run a script in Tcl should have
that script store its result in a variable, run the ddeexecute com-
mand, and the run dderequest to get the value of the variable.
When using DDE, be careful to ensure that the event queue is flushed
using either update or vwait. This happens by default when using wish
unless a blocking command is called (such as exec without adding the &
to place the process in the background). If for any reason the event
queue is not flushed, DDE commands may hang until the event queue is
flushed. This can create a deadlock situation.
EXAMPLE
This asks Internet Explorer (which must already be running) to go to a
particularly important website: package require dde ddeexecute iex-
plore WWW_OpenURL http://www.tcl.tk/
SEEALSO
tk(n), winfo(n), send(n)
KEYWORDS
application, dde, name, remote execution
dde 1.2 dde(n)