
No.4ベストアンサー
- 回答日時:
>プログラムAに、「1のファイルを開け!というコマンドラインを渡し、
>プログラムAからそのコマンドラインをプログラムBに渡し、
>プログラムBからファイルを開くということがしたいのです。
>プログラムAB共に自分で開発しており、
>ファイルを開いて見れるアプリなのです。
プロセス間通信によりプログラムAからプログラムB
にコマンドラインを送信し、
プログラムB側で、
受け取ったコマンドラインを解析して
ファイルを開けば良いのでは?
プロセス間通信は、WM_COPYDATAでも、
共有ファイルでもいいし、他にも名前付きパイプ等色々あります。
受け側では、プロセス間通信により
受け取ったコマンドラインを解析し、
ファイルを開く関数にファイル名を引き渡し、
開かせればよいのではないでしょうか?
自分で開発したプログラムなのですから
ファイル名を引数で与えて開く関数は
作ってあるでしょう?
No.3
- 回答日時:
> すでに起動しているプログラムB
このプログラムBも kgyqk433さんが開発しているものですか?
または、ソースがあり内容を変更できるのでしょうか
どのようなものを想定しているのかをもう少し具体的にしたほうが的確な回答を得やすいかと思います
たとえば
1) 自分で開発しているコンソール型のアプリ
2) 既存のWindows付属のメモ帳など GUI系のアプリ
3) 自分で開発している GUI系のアプリ
私の言葉不足ですみません。。。
プログラムAでGetCommandLine()で取得したコマンドラインをプログラムBにコマンドラインとして渡したいのです。。
プログラムAに、「1のファイルを開け!というコマンドラインを渡し、プログラムAからそのコマンドラインをプログラムBに渡し、プログラムBからファイルを開くということがしたいのです。
言葉不足で大変もうしわけございません。
プログラムAB共に自分で開発しており、ファイルを開いて見れるアプリなのです。
お手数ですがよろしくお願いします。
No.2
- 回答日時:
>SendMessage()でWM_COPYDATAメッセージを
>プログラムBに向かって送りつけるのが楽かもしれません。
一つのアイディアだと思います。
しかし、問題があります。
送り元のプログラムは、送信先のウィンドウ・ハンドルをどうやって
入手するのでしょう?
FindWindow()等で検索する必要があると思います。
ちょっと面倒です。
さらに、受け取りたいのがアプリのメインウィンドウならば良いのですが、
メインウィンドウ以外の場合
(ex MFC Doc/View のViewで受け取り、クライアント領域に
描画したい場合)
メインウィンドウからルーティングしなければなりません。
これも面倒です。
私は、シンプルに”ファイル"(共有ファイル)をお勧めします。
適当なフォルダ
(決め打ちでもいいですし、
GetTempPath()で取得してもかまいません)
に決め打ちのファイルを作ることにします。
送信元はただ書き込むのみです。
受信側は、必要な場所で読み込めばOKです。
Viewで必要なら、
Viewのタイマーかなんかでチェックし、
読み終わったら削除し、タイマーを切ればよいのです。
ウィンドウハンドルを気にする必要もないし、
メインウィンドウからルーティングしてもらう必要もありません。
WM_COPYDATAに比し、弱点は
1)ハードディスクを使うので、I/Oエラーを処理する必要があります。
2)ハードディスクを使うので、速度が遅いです。
しかし、SendMessage()の場合も、相手がビジーであれば遅くなります。
むしろ、ファイルの場合は完全非同期なので、
相手がビジー状態であってもすぐに戻れるメリットがあります。
PostMessage()に代えれば?
という声もありますが、
残念なことにWM_COPYDATAはPostMessageできません。
http://mrxray.on.coocan.jp/Halbow/Notes/N012.html
結論としては
A)受け手が安定したプログラム(何秒もビジーになったりしない)で、
FindWindow()で簡単にウィンドウを見つけられる
(独自のウィンドウ・クラスを登録してる、
独自のキャプションを付けている等)
この場合は、WM_COPYDATAがお勧めできます
B)上記に該当しない場合
不安定なプログラムであったり、
MFCのデフォルトのウィンドウ・クラス名をそのまま流用していたり、
キャプションもアプリ名を省いたものに代えていたりとういう場合
ファイルベースがお勧めです
私の言葉不足ですみません。。。
プログラムAでGetCommandLine()で取得したコマンドラインをプログラムBにコマンドラインとして渡したいのです。。
プログラムAに、「1のファイルを開け!というコマンドラインを渡し、プログラムAからそのコマンドラインをプログラムBに渡し、プログラムBからファイルを開くということがしたいのです。
言葉不足で大変もうしわけございません。
No.1
- 回答日時:
こんばんは。
SendMessage()でWM_COPYDATAメッセージをプログラムBに向かって送りつけるのが楽かもしれません。
送信側
http://msdn.microsoft.com/ja-jp/library/ms649011 …
受信側
http://msdn.microsoft.com/ja-jp/library/5hcat2sc …
其の他、当方は試した事はないのですが、受信側に受け付け用のエディットボックスを用意しておき、送信側が其のエディットボックスに向かって、WM_SETTEXTで文字列を送信しても、容易に出来るのだそうです。
私の言葉不足ですみません。。。
プログラムAでGetCommandLine()で取得したコマンドラインをプログラムBにコマンドラインとして渡したいのです。。
プログラムAに、「1のファイルを開け!というコマンドラインを渡し、プログラムAからそのコマンドラインをプログラムBに渡し、プログラムBからファイルを開くということがしたいのです。
言葉不足で大変もうしわけございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルの開き方
-
CASLIIのプログラム(並び替え...
-
socketでの複数NICの扱い
-
VBAでユーザーフォームが自動的...
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
未使用の変数を一括検索する方法
-
OS入ってる機器のソフト・アプ...
-
XnViewにwebpを「いつも開く」...
-
セーブの仕方を教えて下さい
-
VB.NETで、プログラム上から新...
-
TMBMSRV.exeによるCPU使用率上昇
-
プログラムから開く・・・DPP
-
べき乗
-
自動クエリとはどういうもので...
-
Google カレンダーの商用利用
-
VB6から他のプログラムを強制終...
-
クリックするとページ内で説明...
-
excelのexe化について
-
正しい五十音順について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
OS入ってる機器のソフト・アプ...
-
Excelで4096点以上のFFTの方法
-
読み込み中にアクセス違反が発...
-
銃を発砲するならともかく、日...
-
VBAにてメール作成した際、一部...
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
UWSCで指定のフォルダを開きたい。
-
XnViewにwebpを「いつも開く」...
-
Excelに埋め込んだVBAのプログ...
-
「Outlookが他のプログラムによ...
-
visual studio 2019を使ってい...
-
未使用の変数を一括検索する方法
-
powered byの表記について
-
VBAでユーザーフォームが自動的...
-
画像を読み込むのと取り込むの...
-
VC++コンソールアプリでウイン...
-
Google カレンダーの商用利用
おすすめ情報