このファイルは、DDEClient.exe DDEClientC.exe のドキュメントです。

DDEClient/DDEClientC は、汎用のDDEクライアントです。
任意のアプリケーションに対して、XTYP_EXECUTE コマンドとXTYP_REQUESTコマンドを送れます。

DDEClientの方はWin32アプリケーションで、ウィンドウなどを一切生成しません。
結果表示などの要らない関連付け起動用などにご利用ください。

DDEClientCの方は、標準エラー出力にメッセージおよび結果を表示します。
DOS窓からの操作などにご利用ください。


XTYPE_EXECUTEコマンドでは、アプリケーションの動作制御が行えます。
XTYP_REQUESTコマンドでは、その結果を表示できます。
結果は、文字列として表示します。
文字列以外のデータを返すアプリケーションでは、正常な表示が行えません。

結果表示はコマンドライン版でしかできないので、
DDEClient.exeは実質XTYP_EXECUTE専用となります。


[設定]

任意のアプリケーションを制御するには、設定ファイルを書く必要があります。
設定ファイルは、DDEClient.exe/DDEClientC.exeと同じフォルダに、
DDEClient.ini というファイル名で生成します。
中身は、以下のようにしてください。

=======ここから=======
[General]
ServiceName = 対象DDEサーバのサービス名
TopicName = 対象DDEサーバのトピック名
WindowClass = 対象DDEサーバのウィンドウクラス
ServerRegKey = 対象DDEサーバのパスが格納されたレジストリキー(HKEY_CURRENT_USER以下を検索します)
ServerPath = 対象DDEサーバのパス
ServerOptions = 対象DDEサーバ起動時に渡すオプション引数
UseQueryStatus = 対象DDEサーバの起動確認を行うかどうかのフラグ(TRUE/FALSE)
QueryStatus = 対象DDEサーバの起動確認に使うDDEコマンドライン
StatusAcceptable = 対象DDEサーバの起動確認で成功したときの受け取り文字列
=======ここまで=======

ファイルが見つからないか、記述が省略してある項目は、デフォルトでuLilith用に設定されます。

ServiceNameとTopicNameは必須です。

WindowClassは、既に起動しているDDEサーバを制御する時に必要です。
このウィンドウクラス名でDDEサーバのウィンドウを検索します。
最初に一致したウィンドウに、DDEコマンドが送られます。
一致するウィンドウが無かった場合には、ServerRegKey/ServerPathのどちらかを使って、
新規にプロセスを起動します。

ServiceName/TopicName/WindowClassは省略時は
uLilith制御用に設定されます。
また、このときに限り、
UseQueryStatus/QueryStatus/StatusAcceptableが省略された場合、
uLilith用設定が使用されます。


ServerRegKey/ServerPathは、新規にプロセスを起動してコマンドを送る時に必要になります。
ServerRegKeyには、HEKY_CURRENT_USER以下のレジストリキーを指定し、
そこからDDEサーバプログラムへのパスを取得します。

例：
HKEY_CURRENT_USER\Software\Project9k\uLilith\Pathにある場合には、
ServerRegKey = Software\Project9k\uLilith\Path
と指定します。半角スペースが含まれる場合には、" "で括ってください。
ServerRegKey = "Software\Project9k uLilith\Path"

ServerRegKeyの指定が無いか、指定された先から情報を取得できなかった場合、
ServerPathをサーバプログラムへのパスとして使用します。
どちらかを設定するようにしてください。
なお、パス決定の流れは、以下のとおりになります。

ServerRegKeyが指定されていれば、そこから情報を取得。
レジストリから情報が取得できない場合には、ServerPathを取得。
ServerPathを取得できない場合、Lilithが使うレジストリキーから情報を取得。
レジストリから情報を取得できない場合、カレントフォルダのLilith.exeを使用。

このようにServerRegKey/ServerPathともに指定がない場合には、
レジストリキーの指定パスまたはカレントフォルダのuLilith.exeが起動されますが、
このときのオプション引数(ServerOptions)は自動的に/DDEが使用されます。

[使用方法]

書式： DDEClientC.exe [XTYP_EXECUTE | XTYP_REQUEST] commandline

先頭に XTYP_EXECUTE または XTYP_REQUEST をつけて、半角スペースを挟んで、送るコマンドを書きます。
XTYP_EXECUTEは省略可能です。先頭のトークンがXTYP_EXECUTE | XTYP_REQUESTのどちらでもない場合、
その部分から送信コマンドラインとして判断し、XTYP_EXECUTEで送信します。

したがって、
DDEClientC.exe XTYPE_REQUEST commandline
などのようにタイプミスすると、
本来は、XTYP_REQUESTで commandline 部分だけを送るつもりでも、
XTYP_EXECUTEに、
XTYPE_REQUST commandline
というコマンドが送られてしまいますので注意。


例：
uLilithで次の曲に進める場合
DDEClientC.exe /next

例：
uLilithでaaa.mp3とbbb.mp3を開き、aaa.mp3を再生開始する場合

DDEClientC.exe /open aaa.mp3 bbb.mp3 /play

例：
uLilithで現在のボリュームを取得する場合
DDEClientC.exe XTYP_REQUEST /volume

例：
uLilithで現在の再生位置を秒単位で取得する場合
DDEClientC.exe XTYP_REQUEST /seek sec


ソースコードを添付しておきますので、適当に弄くって遊んでください。
短時間でテキトーに書いたので、バグとかたくさんあるかもしれません。

2004/04/22 サーバプログラムを新規起動時のバグを修正＆オプション引数の引渡しを可能に
2004/09/05 多重起動時、サーバプログラム起動部分を排他制御するように修正
2004/11/20 デフォルト設定での使用時、新規サーバ起動の際の作業ディレクトリが適切でないのを修正
2004/11/20 新規サーバ起動時に、メインウィンドウ以外へDDEメッセージを送出する可能性があったのを修正
2004/11/28 新規サーバ起動時、特殊 DDE メッセージによって、正常な DDE 待ち受け状態を確認する機能を追加
2008/10/18 Unicode ビルドに対応。標準設定を uLilith 用に変更