投稿日 | : 2005/03/08(Tue) 07:57 |
投稿者 | : L.O.N. |
URL | : |
タイトル | : Re^4: 二重起動防止について(Mutex使用) |
Starfish さん、再度の返信ありがとうございます。
> VBから、GetLastErrorを呼び出しても正しい値は取れません。
> Err.LastDllError を使ってください。
VB で GetLastError が正常に作動しない件は、
どうやらFAQレベルの内容のようですね。
(自分のレベルの低さになさけないです。)
Err.LastDllError に切り替えましたら、
正常に動作いたしました。
以下は、そのチェックを実行しているコードです。
------------------------------
'ミューテックス関連
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal
lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private SystemMutex As Long 'このプログラムのMutex値
'プログラム初期化時使用定数定義
Private Const ERROR_ALREADY_EXISTS = 183
Private Sub Form_Load()
Dim PrevhMutex As Long
Dim ProgramID As String
Dim ErrorCode As Long
ProgramID = "31CEDC40-45FC-4957-AB00-282CDAC6D901"
SystemMutex = CreateMutex(0, True, ProgramID) 'Mutexを作成する
ErrorCode = Err.LastDllError
If (ErrorCode = ERROR_ALREADY_EXISTS) Then '作成済みならば、これにひっ
かかるはずが、なぜか動作しない。
MsgBox "多重起動"
Unload Me
Exit Sub
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim Win32Apiresultcode As Long
Win32Apiresultcode = CloseHandle(SystemMutex)
End Sub