![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になります。
C++Builder5のアプリ(ホスト)とVC++のアプリ(ターゲット)を
作成しています。
ホスト側のスタート/ストップボタンでターゲット側の動作を
開始、停止させたいのですが良い案が浮かびません。
案の1つとして
それぞれのアプリがあるフォルダをポーリングしていて
動作指示ファイル(Start.datなど)を作成すると、
ターゲット側がそのファイルを発見して動作を開始する。
応答として(Started.dat)を作成する。
停止時も同様のやりとり。
上記の条件でとりあえずは実現できたのですがあまり
効率が良くない(それぞれがポーリングしているなど)
のでFindWindowやPostMassageを使用すればもう少し
上手く出来るかもしれないと聞きました。
調べているのですがFindWindowやPostMassageの使い方が
特にターゲット側でどう処理して良いのか分かりません。
そこまで分かったなら自分で調べろと言われても仕方が
無いのですが急いでいるのでもしご存知の方、もしくは
参考サイト、サンプルなどございましたら教えて
いただけ無いでしょうか。
自分でも引き続き調べますのでよろしくお願いします。
No.1ベストアンサー
- 回答日時:
ターゲット側のウィンドウに識別しやすい適当な文字列を設定しておきます。
(ここでは "Target Window" とします)
ホスト側で、FindWindow 関数でターゲット側のウィンドウを検索します。
例: hwnd = FindWindow( NULL, "Target Window" );
ターゲットを制御する際、PostMessage でターゲット側のウィンドウに
メッセージを送信します。
例: PostMessage( hwnd, WM_APP + 0x100, 0, 0 );
SendMessage 関数を用いるとターゲット側の処理が終わるのを待つことが出来ます。
ターゲット側ではウィンドウプロシージャでメッセージを受け取ります。
例: ( switch 文の中として )
case (WM_APP + 0x100):
(制御メッセージを受け取った際の処理…)
WM_APP というのは自分でメッセージを定義する為の定数です。
#define WM_CTRLTARGET (WM_APP+0x100)
とでもしておくと便利です。
他のプログラムとメッセージ識別子が重なるのを避けたい場合は
RegisterWindowMessage 関数を使用してください。
早速のご回答ありがとうございます。
現在悪戦苦闘中なのですが少し進んだ気がします。
引き続き調べながらしていますので何かありましたら宜しくお願いします。
No.4
- 回答日時:
#3です。
メールスロットは、一方向ですが、ファイルの読み書きと同じ手順で情報を渡せます。
質問の内容からすると、
ターゲット側 = メールスロットのサーバ
ホスト側 = メールスロットのクライアント
になります。
サンプルは参考URLをどうぞ。
参考URL:http://hp.vector.co.jp/authors/VA007941/program/ …
この回答への補足
ご回答ありがとうございます。
このような方法もあるのですか。現在別の用事で
作業が止まっているのですが、時間が出来次第
調べてみようと思います。
No.3
- 回答日時:
プロセス間通信の一つである「メールスロット」を使う手もあります。
使用するAPIは
CreateMailslot サーバ側のOpen
CreateFile クライアント側のOpen
WriteFile 送信
ReadFile 受信
です。
この方法であれば任意の情報を送信できます。
検索してみてください。
アドバイスありがとうございます。
最初にアドバイスをくださった方の案で一応解決には
向かいました。
申し訳ないのですがポイントを発行できる人数が
限られているためポイントの発行順位を
解決案(No1の方)→解答を下さった順とさせていただきます。
今後の参考にさせていただきます。
No.2
- 回答日時:
Windowsを使うのであれば、プロセス間の情報の共有には名前つきオブジェクトを使うのが楽です。
スタート・ストップのようなフラグ的情報であればEventオブジェクトを使うのがよいでしょう。関連するAPIは
CreateEvent/OpenEvent/SetEvent/ResetEvent/PulseEvent/WaitForSingleObject/WaitForMultipleObjects
です。
ご回答ありがとうございます。下記の方とは違う方法
なのですよね。(申し訳ございません無知なもので)
調べてみて簡単に実現できそうならばしてみることに
します。まだ苦闘中ですので何かありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる(続) 4 2023/03/21 21:28
- WordPress(ワードプレス) Wordpress 複数プラグインの不具合? 1 2022/10/09 21:52
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- ASP・SaaS イントラネットを構築したい 2 2022/04/24 11:08
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- その他(悩み相談・人生相談) 客観的に見て私の適職・天職は何ですか? ①過去に夢中になったものは何か? 絵(幼稚園から今もずっと) 5 2022/07/14 16:36
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(クラウドサービス・オンラインストレージ) Onedriveで実現したい事。2台のPC間で。 2 2023/04/10 20:42
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
msgboxの表示位置
-
コールバック関数とは…(C言語)
-
マウスの状態の取得
-
CloseHandle()
-
MQプログラミング MQGetの手法...
-
VB6でシャットダウン、ログオフ...
-
マウスホイールをフックしたい
-
有効でないウインドウハンドル...
-
キーボード・フックのアプリを...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
コンボボックス内の文字サイズ変更
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
-
コントロールの書式設定で、“コ...
-
マインクラフト(pc版)で座標...
-
検索の画面がでなくなってしま...
-
NVIDIAのシェーダーキャッシュ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
VBAでコントロールのハンドルを...
-
Excel VBA で外部アプリケーシ...
-
VB.netでFindWindowExやると・...
-
メッセージハンドラ
-
点滅で知らせる方法
-
CloseHandle()
-
システム例外のメッセージを変...
-
WM_NCLBUTTONUPについて
-
デスクトップ上のアイコンの位...
-
メッセージループについて
-
キーボード・フックのアプリを...
-
VBでRegisterWindowMessage関数...
-
WM_CTLCOLORDLG
-
windowsメールスロットについて...
-
マウスフックについて
おすすめ情報