Program-01 プログラムの二重起動を防止する

Q 二重起動されては困るプログラムがあるんです。どういう解決方法がありますか?
A 「ミューテックス」と呼ばれるものを使うのが楽かと思います。
どう使う?
'関数の宣言(コードの一番上の部分に書くことを推奨)
Declare Function
CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As VoidPtr, bInitialOwner As Long, lpName As String) As Long
CreateMutex(0,0,"プログラム名")
If GetLastError()=183 Then
    MsgBox 0,"このプログラムは二重起動できません。","エラー",MB_ICONEXCLAMATION
    End
End If
コードの一番上の部分に上の表に書いた内容を書き加え、プログラムの開始時に下の表に書いたコードを実行すればOKです。
1行目・CreateMutex関数の第3引数にはプログラム名でもいいし、好きな文字列でもいいですが、変数などを使っていて、プログラムの動作によって変化することのないように(ここでは直接文字列で記述しています)注意してください。
この関数は、指定した名前の「ミューテックス」を作成します。

また、CreateMutex関数は、既に同じ名前(第3引数で指定)で作られた「ミューテックス」が存在する場合はエラーになります。このエラーがGetLastError関数で求められ、「ミューテックス」の作成が失敗した場合は183が取得できます。
そして、3行目でエラーメッセージを表示して(もちろん、必要なければしなくてもよい)、4行目でそのプログラムを終わらせています(こちらは必須)。

本来、作成した「ミューテックス」はプログラム終了時などに解放する必要があるのですが、プログラム内で解放しなくても自動でこの辺の処理はしてくれるようなので、ここでは省略しておきます(その方が説明しやすい)。

メニューに戻る