HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1130
にゃんちゃん複数起動時の処理4解決


にゃんちゃん

リンク

2014/11/30(Sun) 23:04:43|NO.66255

こんばんは。
たとえば、音楽ファイルを表示しているファイルリストを持つアプリケーションを作ったとします。同じアプリケーションはmutexオブジェクトを使って複数起動をブロックすることにします。
アプリケーションがファイルリストを持った上体で、同じアプリケーションが特定のファイル名を含むコマンドライン付で実行されたとき、コマンドラインで渡されたファイル名を最初に起動していたアプリケーションに渡してから終了するようにしたいのですが、どのように実装すればよいかがわかりません。
ウィンドウメッセージで渡せばいいかとも思いましたが、送信先のウィンドウハンドルがわからないし、かと言ってファイルとかを経由するとゴミ処理のコストが発生するので、なにかよい方法を探しています。
Windows Media Playerとかは、起動しているときにエクスプローラで別の音楽ファイルを開くと、開いたファイルにすぐ切り替わって再生してくれると思いますが、あのような実装はどうやっているのでしょうか?
ちなみに、これをやるためにウィンドウメッセージのリファレンスを読んで適当に理解したぐらいなので、ウィンドウメッセージとHSPでの実装についてはあまり分かってないかもしれません。基本は理解したつもりですが。
よろしくお願いします。



この記事に返信する


cats

リンク

2014/11/30(Sun) 23:12:05|NO.66257

ブロードキャストという方法でプロセス間通信を行うのがベストかと思います。
http://chokuto.ifdef.jp/advanced/copydata.html
アプリケーションは起動時に、既に起動しているかを確認します。
既に起動されていた場合は、そのプロセスにメッセージを送ります。
起動されていなかった場合は、音楽の再生へと移り、同時にoncmdで
メッセージが来ないかを監視します。



にゃんちゃん

リンク

2014/12/1(Mon) 20:26:40|NO.66275

ご助言ありがとうございます。
提示いただいた資料を読んでみました。今回はそんなに広い範囲に公開するものでもないので、わざわざブロードキャストしなくても大丈夫かなと思うので、findWindow関数で送信先を見つけようと思います。
同じスレッドで別の質問をしてしまってちょっと申し訳ないのですが、もうひとつ教えてください。
WM_CopyDataだったかな?バイナリデータを送信できるウィンドウメッセージを使ってプロセス間通信をしようと思います。
これを使うときに、構造体を作ってそのなかにバイナリを埋め込まないといけないと思いますが、そのやりかたがいまいち分かっていません。
まず、必要なだけのint型配列を作ります。
4バイト整数なら普通に放り込めば終了です。
バイナリを入れる場合、理論的にはそれぞれの配列に4バイトずつ入れていけばいいというのはわかるのですが、スクリプトの書き方がわかりません。
たとえば、入れる内容がABC.mp3だったら、
0x41 0x42 0x43 0x2E
0x6D 0x70 0x33 0x00
になって、int型2個に収まるんであろうということは分かります。
pokeとかmemcpyを使うのでしょうか?
よろしくお願いします。



lotta

リンク

2014/12/1(Mon) 21:42:30|NO.66277

WM_COPYDATAで過去ログ検索すれば出てきました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=45426
でもどう見てもバグがありますので送信側の
msize = strlen(msg)

msize = strlen(msg)+1
に変更しないといけませんね。



にゃんちゃん

リンク

2014/12/1(Mon) 23:22:51|NO.66279

なるほど、わざわざ配列に分けて入れなくても、1個の要素に文字列へのポインタを入れればそれでいいようですね。参考になりました。
とりあえずコーディングしてみたいと思います。ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.