- 締切済み
多重起動での同期動作
よろしくお願いします。 VB2005にて開発していますが、アプリケーションを場合によって多重起動し、ボタンのクリックなどを同期的に発生させたいと考えています。 つまり、どれか一つのボタンを押すと、他の分身たちも同じクリックイベントが発生する。といった事です。 VB WH_KEYBOARD_LL や PostMessage などで色々やっては見たのですが、どうも思ったような動作をしません。 「それは無理だ」とか、「#$%%&で出来るだろ?」みたいなアドバイスだけでも戴けると有難いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
回答No.1
私はマルチプロセスの同期や指令にSendMessageを使っています。 ターゲットのウィンドウは非表示にして、誤操作を防いでいます。 この方法はウィンドウのサブクラス化ができるスペックと、 メッセージを送り込むウィンドウのハンドルをどう受け渡すかが ポイントになります。 何故かPostMessageだと上手くいかないんですよね。なので、 サブクラス化したプロシージャではタイマを仕掛けて、直ぐに 処理を終わります。タイムアップの所で本来の処理をするように しています。 ウィンドウハンドルは先ず親プロセスが子プロセスを起動する時に 親のウィンドウのハンドルをコマンドラインで渡します。 子プロセスは自ウィンドウのハンドルを親ウィンドウに伝えます。 これで、相互に通話(?)可能になります。 後、継承可能にしたミューテックスを使って、資源の競合を制御 したりすることも必要かも知れません。
お礼
nda23さま、ご助言有難うございました。 そうですか、PostMessageで上手くなかったですか... SendMessageだと、一旦子プロセスをアクティブにするのですよね? ん? 「ターゲットのウィンドウは非表示に」ですか。知識不足で分って いませんが、そういった方法があるんだ。という目で調べてみます。 でも、ハンドルのコマンドライン渡しとか、私にはハードル高いかなぁ。(汗) 状況によって、多重起動が6プロセスにもなるので、出来るだけ軽い 実装をしたいと思っています。 重ねて有難うございました。また何かありましたら宜しくお願い致します。