dde

ReferenceTOPKeywords

コマンド名

dde -動的データ交換(DDE)コマンドを実行します。

構文

package require dde 1.2
dde servername ?topic?
dde execute ?-async? service topic ?data?
dde poke service topic item data
dde request ?-binary? service topic ?item?
dde services service topic ?data?
dde eval ?-async? service topic ?data?

解説

本コマンドは、アプリケーションがMicrosoft Windowsで実行している場合のDynamic Data Exchange ( DDE ) コマンドを送ることを可能にします。Dynamic Data Exchange ( DDE )はアプリケーション同士が直接、データを交換するメカニズムの1つです。 DDEトランザクションにはserver nametopicが必要です。server nametopicの両方はアプリケーションで定義されます。TclはTclEvalをサーバー名として使います。topic 名はdde servernameによって与えられたインタープリタ名です。他のアプリケーションは各々独自のserver name 及びtopicを定義します。例えば、Microsoft ExcelはExcelをサーバー名として使います。

eval とexecute コマンドでは-asyncオプションを使うことが出来ます。

DDEコマンド

次のコマンドはDynamic Data Exchangeコマンドの全セットのサブセットです。

dde servername ?topic?
dde execute ?-async? service topic data
dde poke service topic item data
dde request ?-binary? service topic item
dde services service topic
dde eval ?-async? topic cmd ?arg arg ...?
dde servername?topic? 
dde servernameはインタープリタをDDEサーバとして登録します。TclEvalをサーバー名とし、topic引数で指定されたtopic名とします。topicが指定されない場合、dde servernameはカレントのtopicを返します。servernameはサービスとして登録されていない場合は空の文字列を返します。

dde execute ?-async? service topic ?data?
dde executedatatopicで指定されたtopicと合わせて、serviceにで指定されたサーバに送ります。通 常serviceはアプリケーション名であり、topicは使用されているファイルです。dataフィールドはリモートのアプリケーションに転送されます。受け取りアプリケーションはdataフィールドをスクリプトとして処理します。スクリプトは受け取りアプリケーションにおいて実行されます。-asyncオプションは非同期呼び出しを要求します。-asyncを使わない場合、スクリプトが実行されなければ、このコマンドはエラーメッセージを返します。-asyncを使った場合はエラーを返さずに終わります。

dde poke service topic item data
dde poke は指定されたtopicitemを使って、serviceによって示されたサーバにdataを転送します。 通常serviceはアプリケーション名です。 topicはアプリケーション依存ですが、通常はサーバのコマンドまたは転送されるファイル名です。itemもアプリケーション依存で、あまり使われませんが、常に非ヌル値でなければなりません。dataフィールドはリモートアプリケーションに転送されます。

dde request ?-binary? service topic ?item?
一般的にdde requestは値を取得するためのコマンドです。例えば、Microsoft Excelにおけるセル(cell)の値、またはMicrosoft Wordにおける選択注テキスト等を取得します。通常serviceはアプリケーション名、topicはファイル名であり、itemはアプリケーション依存です。このコマンドはアプリケーションで定義されたitemの値を返します。通常はこの値がヌルを末尾とする文字列と解釈されます。-binaryが指定された場合、結果は1つのバイト配列として返されます。

dde services service topic
dde servicesは現在コンピュータに存在するservice-topicペアのリストを返します。servicetopic両方が空文字列 ( {} ) なら、システム上現在全ての利用可能なservice-topicのペアを返します。serviceが空であり、topicが空でない場合、指定されたtopicを持つ全てのサービスは返されます。serviceが空でないが、topicが空である場合、指定されたサービスに関する全てのtopicが返されます。両方が空でないservice-topicペアが存在する場合は、そのペアを返します。そうでない場合は、ヌルを返します。

dde eval ?-async? service topic ?data?
dde evaltopic によって指定されたインタープリタを使って指定コマンドをその引数で実行します。DDEサービスはTclEvalサービスでなければなりません。-asyncオプションは非同期呼び出しを要求します。-asyncを指定しない場合、スクリプトが実行されなければ、このコマンドはエラーメッセージを返します。そうでない場合は、このコマンドはエラーを返さないで終わります。このコマンドはWindowsへの復帰要求送信のためにつかわれます。

DDEとTCL

Tclインタープリタは常にTclEval型のサービス名を持っています。 実行されている全Tclアプリケーションの個々の異なるインタープリタはdde servernameによって指定されたユニークな名前をもたなければなりません。各interpはDDEのtopicとして利用可能にするには、dde servernameコマンドが各interpのためにtopic名を設定しなければなりません。従って、dde service Tcl {}コマンドは、service-topicペアのリストを返し、そのtopicの内容は現在実行されている各々のinterpです。

Tclがdde executeコマンドを処理するとき、dde executeコマンドのtopic引数で示すinterpは、引数として与えられたデータをスクリプトとして実行します。

Tclがdde requestコマンドを処理するとき、ddeコマンドの引数で示された変数の、ddeのtopicによって示されたinterpの文脈における値を返します。Tclは内部使用のために変数$TCLEVAL$EXECUTE$RESULTを保存します。この変数に対してdde requestコマンドを実行しても、不特定な結果しか得られません。

Tclでスクリプトを実行したい外部のアプリケーションは、スクリプトの実行結果を1つの変数に格納しておき、dde executeコマンドを実行させます。dde requestを実行することでその変数の値を取得できます。

DDEを使うとき、イベントの列を update vwaitのいずれかを使ってフラッシュして置かなければなりません。wishを使うとき、blocking コマンド (たとえば、プロセスをバックグラウンドに置くための「&」が付いていないexec の場合 ) を呼びださない限り、このフラッシュ動作はデフォルトとして実行されます。なにかの理由でイベント列がフラッシュされていない場合、イベント列はフラッシュされるまではDDEコマンドは待ち状態になります。システムはデッドロック状況になってしまいます。

参照

tk, winfo, send

キーワード

application,dde, name, remote execution


Copyright © 1997 Sun Microsystems, Inc. Copyright © 2001 ActiveState Corporation. Copyright © 1995-1997 Roger E. Critchlow Jr.