すでに起動してある同じEXEにコマンドをおくるには

解決


Kahzu  2005-02-18 11:36:03  No: 88503  IP: [192.*.*.*]

お世話になります。

すでに起動しているexeに対して、エクスプローラからダブルクリックでファイルを読み込む際、該当するexeを見つけることはできた(hWndは取得済み)のですが、読み込む方法がわかりません。

現在、下記の構造部分が構築済みです。

Main 関数内(省略しています。)
'多重起動防止
If App.PrevInstance then
    FindWindowで該当exe(ウィンドウ)を探す
    上記で得たhWndを用いてSetForegroundWindow,ShowWindowで前面表示
    
    ※

Else
    通常の起動(コマンドラインの解析を含む)
    システムを表示
End If
    
上記の※印部分で、コマンドを送ればと思うのですが、方法が見つかりません。
どうすればよいのか、ご教授願います。
よろしくお願いいたします。

編集 削除
魔界の仮面弁士  2005-02-18 11:52:19  No: 88504  IP: [192.*.*.*]

通信相手も自作アプリなら、LinkExecuteメソッドを使ってみては如何でしょう。

編集 削除
Kahzu  2005-02-18 12:08:02  No: 88505  IP: [192.*.*.*]

魔界の仮面弁士様、ご返答ありがとうございます。
早速、調べて構築してみます。

編集 削除
LESIA  2005-02-18 13:10:28  No: 88506  IP: [192.*.*.*]

これかな?
http://www31.ocn.ne.jp/~heropa/vb27.htm

編集 削除
Kahzu  2005-02-18 13:43:25  No: 88507  IP: [192.*.*.*]

LESIA様  ご返答ありがとうございます。

説明不足で申し訳ありません。
多重起動防止処理は、実装しております。
この処理に引っかかった場合、自分に来たコマンドラインメッセージを、
元々存在していた同アプリに送る方法を探しております。

編集 削除
Kahzu  2005-02-18 14:08:51  No: 88508  IP: [192.*.*.*]

魔界の仮面弁士様

お世話になります。
linkExecuteですが、テキストを送るためのラベル、テキストボックス等のコントロールを含むフォームが必要となるわけでしょうか?。*印の時点で、コマンドを送った後は、どのフォームも呼びださず終了させたいのですが。
そのようなことはできるのでしょうか。

編集 削除
あん  2005-02-18 14:10:11  No: 88509  IP: [192.*.*.*]

起動するEXEをActiveX  EXEにすると
簡単にできたかも
いまさらですが...

編集 削除
Dental  2005-02-18 15:02:14  No: 88510  IP: [192.*.*.*]

DDE通信用のフォーム自体は、ロードだけ(非表示)にして運用するとか。

それが嫌なら、ファイル渡し、レジストリ渡し、ActiveXによる通信、
共有メモリ、クリップボード渡し等々……

編集 削除
ガッ  2005-02-18 16:53:20  No: 88511  IP: [192.*.*.*]

時にはLoopbackにTCPかUDPで…(ぇ

編集 削除
あん  2005-02-18 17:10:09  No: 88512  IP: [192.*.*.*]

>上記の※印部分で、コマンドを送ればと思うのですが、方法が見つかりません。
コマンドを渡すのはいいのですが
そのコマンドを受け取る方法も考えないと..
どこで受け取ることができるのかな?

①頻繁に起動させない。(頻繁ならキューにためる方法を考えないと)
②他のアプリが起動していない。
③他の作業をしていない。
ならクリップボードの方法が楽かな。

編集 削除
Kahzu  2005-02-18 17:44:35  No: 88513  IP: [192.*.*.*]

あん様、Dental様、ガッ様

多数のご返答ありがとうございます。
今、DDE通信で構築して動作確認できました。
方法はいろいろあることを知りました。
DDE以外の方法でも試してみようと思います。

編集 削除
Kahzu  2005-02-18 17:45:19  No: 88514  IP: [192.*.*.*]

チェック忘れていました。
管理者様すみません。

編集 削除