二重起動の禁止(U) <TOP>
二つのアプリケーションのファイル名が、異なっていても、二重起動を禁止します。
OpenMutex
既存の名前付きミューテックスオブジェクトを開く
CreateMutex
名前付きまたは名前なしのミューテックスオブジェクトを作成または開く
ReleaseMutex
指定されたミューテックスオブジェクトの所有権を解放
CloseHandle
オープンされているオブジェクトハンドルをクローズ
「Test Mutex」という名前のミューテックスが、あるかどうかを確認し、無ければ「Test Mutex」を作成して起動します。有る場合は、その旨メッセージを表示させ終了します。
初回起動時
もう1個起動した場合
参照
'================================================================ '= 二重起動の防止 '= (CreateMutex.bas) '================================================================ #include "Windows.bi" ' 既存の名前付きミューテックスオブジェクトを開く Declare Function Api_OpenMutex& Lib "kernel32" Alias "OpenMutexA" (ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal lpName$) ' 名前付きまたは名前なしのミューテックスオブジェクトを作成または開く Declare Function Api_CreateMutex& Lib "kernel32" Alias "CreateMutexA" (ByRef lpMutexAttributes As Any, ByVal bInitialOwner&, ByVal lpName$) ' 指定されたミューテックスオブジェクトの所有権を解放 Declare Function Api_ReleaseMutex& Lib "kernel32" Alias "ReleaseMutex" (ByVal hMutex&) ' オープンされているオブジェクトハンドルをクローズ Declare Function Api_CloseHandle& Lib "Kernel32" Alias "CloseHandle" (ByVal hObject&) #define ERROR_ALREADY_EXISTS 183 '既に存在している #define MUTEX_ALL_ACCESS &H1F0001 ' Var Shared Mutex As Long '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var Ret As Long 'ミューテックスオブジェクトを開く Mutex = Api_OpenMutex(MUTEX_ALL_ACCESS, 0, "Test Mutex") If Mutex = 0 Then 'ミューテックスオブジェクトを作成または開く Mutex = Api_CreateMutex(ByVal 0, 0, "Test Mutex") A% = MessageBox(GetWindowText, "起動しました!", 0, 2) Else 'オブジェクトハンドルをクローズ Ret = Api_CloseHandle(Mutex) A% = MessageBox(GetWindowText, "既に起動しています!", 0, 2) 'ミューテックスオブジェクトの所有権を解放 Ret = Api_ReleaseMutex(Mutex) End End If End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long 'ミューテックスオブジェクトの所有権を解放 Ret = Api_ReleaseMutex(Mutex) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End