VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -