JVCLのTJvAppInstancesコンポーネントを使用すると、二重起動を防止する機能を簡単に実現できます。
(参考「C++BuilderでTJvAppInstancesを使ってみる」)
次のようなアプリケーションを作成してみましょう。
- アプリケーションは1つしか起動できません。
- 2つめのアプリケーションを起動したとき、1つめのアプリケーションを前面に表示します。
- 2つめのアプリケーションを起動したとき、1つめのアプリケーションが最小化されている時は元のサイズに戻します。
アプリケーションの作成手順
- TJvAppInstancesコンポーネントをフォームに配置します。
-
Activeプロパティをtrueにします。
TJvAppInstancesコンポーネントの機能が有効になります。 -
AutoActivateプロパティをtrueにします。
trueにすると、指定数以上のプログラムが起動された時に、最初に起動したプログラムを前面に表示します。
ただし、フォームが最小化されている場合は、前面に表示されません。 -
MaxInstancesプロパティを1にします。
起動できるプログラムの数を指定します。
今回は二重起動を防止するので、MaxInstancesプロパティの値は1にします。 -
OnInstanceCreatedイベントに次のコードを記述します。
OnInstanceCreatedイベントは新しいアプリケーションが起動した時に発生します。void __fastcall TForm1::JvAppInstances1InstanceCreated(TObject *Sender, DWORD ProcessId) { if (WindowState == wsMinimized) WindowState = wsNormal; }
新しいアプリケーションが起動した時、フォームが最小化されていれば、通常のサイズに戻します。
以上で完成です。
もう少し高度な機能を使いたい時
- 2つめのアプリケーションのコマンドラインを1つめのアプリケーションで受け取りたい場合は、OnCmdLineReceivedイベントを使用します。
コマンドラインの内容が引数で渡されます。 -
2つめのアプリケーションが起動を拒絶されたことを知りたい場合は、OnRejectedイベントを使用します。
起動を拒絶された時にイベントが発生します。 -
起動できるアプリケーションの数を2つ以上にしたい時は、MaxInstancesプロパティの値を編集します。
このように、TJvAppInstancesコンポーネントを使うとアプリケーションの多重起動を簡単に管理できます。