- PR -

プロセス間のパラメーターの受け渡しについて

1
投稿者投稿内容
p
会議室デビュー日: 2004/10/20
投稿数: 7
投稿日時: 2004-10-20 15:14
目的

プログラムが多重起動したら、すでに起動しているプログラムにコマンドラインを渡し、あとから起動したプロセスは終了したい。

前提

ユーザーは不特定多数。.net Framework以外は特別な設定やインストールは不要としたい。

試したこと

ここを参考に、多重起動の防止と、起動済みプロセスへの参照は取得できました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/151winshow/winshow.html

MarshalByRefObjectを使ってみました。
Control.Invokeを使って正しいスレッドにマーシャリングしてくださいというエラーメッセージが出ました。
なんとなく理由は理解できなくもありませんが、tcpやhttpを使わずに通信したいので、この方法は根本的に駄目そうなので深くは追求せず。

MessageQueueを使ってみました。
それなりのサービスがインストールされていることをユーザーに強要してしまうようですね。

SendMessage APIでWM_COPYDATAを送る。
受信側のイベントハンドラをFormのどこにどう書けばよいのかわかりません。


目的が果たせれば通信手段は何でもよいのですが、うまい方法はないでしょうか?
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-10-20 16:22
引用:

SendMessage APIでWM_COPYDATAを送る。
受信側のイベントハンドラをFormのどこにどう書けばよいのかわかりません。



WM_COPYDATA のイベントハンドラなんてものは無いので、Form.WndProc をオーバーライドして、Message.Msg が WM_COPYDATA だったら必要な処理をしてください。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
p
会議室デビュー日: 2004/10/20
投稿数: 7
投稿日時: 2004-10-20 17:27
ありがとうございます。
おかげさまでWM_COPYDATAを受信することができました。
1

スキルアップ/キャリアアップ(JOB@IT)