C++BuilderでTJvAppInstancesコンポーネントを使って二重起動を防止する

JVCLTJvAppInstancesコンポーネントを使用すると、二重起動を防止する機能を簡単に実現できます。
(参考「C++BuilderでTJvAppInstancesを使ってみる」)

次のようなアプリケーションを作成してみましょう。

  1. アプリケーションは1つしか起動できません。
  2. 2つめのアプリケーションを起動したとき、1つめのアプリケーションを前面に表示します。
  3. 2つめのアプリケーションを起動したとき、1つめのアプリケーションが最小化されている時は元のサイズに戻します。

アプリケーションの作成手順

  1. TJvAppInstancesコンポーネントをフォームに配置します。

    TJvAppInstancesコンポーネント

  2. Activeプロパティをtrueにします。
    TJvAppInstancesコンポーネントの機能が有効になります。

  3. AutoActivateプロパティをtrueにします。
    trueにすると、指定数以上のプログラムが起動された時に、最初に起動したプログラムを前面に表示します。
    ただし、フォームが最小化されている場合は、前面に表示されません。

  4. MaxInstancesプロパティを1にします。
    起動できるプログラムの数を指定します。
    今回は二重起動を防止するので、MaxInstancesプロパティの値は1にします。

    TJvAppInstancesのプロパティ

  5. OnInstanceCreatedイベントに次のコードを記述します。
    OnInstanceCreatedイベントは新しいアプリケーションが起動した時に発生します。

    void __fastcall TForm1::JvAppInstances1InstanceCreated(TObject *Sender, DWORD ProcessId)
    {
      if (WindowState == wsMinimized) WindowState = wsNormal;
    }
    

    新しいアプリケーションが起動した時、フォームが最小化されていれば、通常のサイズに戻します。

以上で完成です。

もう少し高度な機能を使いたい時

  • 2つめのアプリケーションのコマンドラインを1つめのアプリケーションで受け取りたい場合は、OnCmdLineReceivedイベントを使用します。
    コマンドラインの内容が引数で渡されます。

  • 2つめのアプリケーションが起動を拒絶されたことを知りたい場合は、OnRejectedイベントを使用します。
    起動を拒絶された時にイベントが発生します。

  • 起動できるアプリケーションの数を2つ以上にしたい時は、MaxInstancesプロパティの値を編集します。

このように、TJvAppInstancesコンポーネントを使うとアプリケーションの多重起動を簡単に管理できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください