二重起動を確実に禁止する
スポンサーリンク
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
関連するリファレンス
準備中です。