VB6二重起動を確実に禁止する

スポンサーリンク

VB6 では、Win32API の CreateMutex 関数から Mutex の取得を試み、成功した時のみ起動するようにします。失敗した場合は、Err.LastDllError に 0 以外の値が格納されています。最後に必ず、CloseHandle で Mutex へのハンドルを閉じておきます。

サンプルコード

以下にサンプルコードを示します。

VB6.0 以前
Option Explicit

' CreateMutex 関数
Private Declare Function CreateMutex Lib "KERNEL32.DLL" Alias "CreateMutexA" ( _
    ByRef lpMutexAttributes As Long,  _
    ByVal bInitialOwner     As Long,  _
    ByVal lpName            As String _
) As Long

' CloseHandle 関数
Private Declare Function CloseHandle Lib "KERNEL32.DLL" ( _
    ByVal hObject As Long _
) As Long
VB6.0 以前
' エントリ ポイント
Public Sub Main()
    Dim hMutex As Long

    ' 新しい Mutex を生成する (Mutex の名前にプロジェクト名を付ける)
    hMutex = CreateMutex(ByVal 0&, 0&, App.Title)

    ' 実行時エラーが発生した場合は Finally ラベルに制御を移す (Mutex へのハンドルを確実に閉じるため)
    On Error GoTo Finally

    ' Mutex の要求が成功した場合はフォームを表示する
    If Err.LastDllError = 0 Then
        Dim cForm As Form1
        Set cForm = New Form1

        Call cForm.Show(vbModal)
    End If

Finally:
    ' Mutex へのハンドルを閉じる
    If hMutex <> 0 Then
        Call CloseHandle(hMutex)
    End If
End Sub

関連するリファレンス

準備中です。

スポンサーリンク