一度に複数のファイルを同一のアプリケーションで開きたいのですが、
2重起動可のアプリだと、ファイル数分だけアプリが起動してしまいます。
(ShellExecuteを使用してファイルを開いています)
これを最初に起動させたアプリで全て開くにはどうしたら
よいのでしょうか?
1) 起動されたときすでに自分と同じアプリが起動済みかどうか調べる
2) 起動済みであれば、それに何らかの方法で今起動されたときの ParamStr(1)
を知らせて、自分は終了する。
3) 起動済みでなければ、自分で開く
という論理。1) は二重起動防止と同じ論理。2) はプロセス間通信の応用。
追加です。
4) ParamStr(1) がなければ何もしないで起動する。
>jokさん
ご返答ありがとうございます。
色々と検索して調べてみたところ、
起動対象アプリのウィンドウハンドルを取得して
SendMessageで制御していく方法が見つかりました。
ただウィンドウハンドルを知るにはPro版に付いてくるWinSightが
必要なようでPersonalを使っている私には無理なようです。残念。
とりあえず、また別な方法を考えてみます…
ん?ウィンドウハンドルはFindWindow APIやEnumWindows APIなどで得るから、WinSightはいらないですよ(WinSightはウィンドウクラスなどを確認するだけ と言うソフトだと思います。持ってませんけど)。
ウィンドウクラスは、Delphiのソフトなら自分で設定できる(フォームのNameプロパティにTをつけたのと同じ)ので問題なしです。
自分のソフト以外のウィンドウクラスは、Finder System(http://www.h3.dion.ne.jp/~hanagex/) とか。つくりは簡単なので、自作もできるでしょう。
>たかみちえさん
こんなツールがあったんですね!
これで再度チャレンジしてみます。
ありがとうございました。
解決済みのようですが、wnd_Broadcastに対してSendMessageすれば、全てのトップウィンドウにメッセージが送られますよ。
場合によっては、予期せぬアプリケーションが誤作動する(そのメッセージを処理してしまう)こともありますが。
ツイート | ![]() |