用PID的话,也许关掉进程后,再次启动该进程PID可能会一样(虽然这种可能性非常小)
怎样才能知道某个进程的唯一性呢,即使进程名相同,PID相同,我也知道进程是我那次启动的

解决方案 »

  1.   

    新建一个clsMutex的类模块Option ExplicitPrivate Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
    End TypePrivate Const ERROR_ALREADY_EXISTS = 183&Private m_hMutex As LongPublic Function CheckMutex(MutexName As String) As Boolean    Dim s As SECURITY_ATTRIBUTES
        m_hMutex = CreateMutex(s, 0, MutexName)
        
        If Err.LastDllError = ERROR_ALREADY_EXISTS Then
            CheckMutex = False
        Else
            CheckMutex = True
        End IfEnd Function
    Private Sub Class_Terminate()
        CloseHandle m_hMutex
    End Sub然后在主框体引用下就可以保持软件启动的唯一性。。不知道你是不是这个需求。。
    '单一实例
    Private mut As clsMutexPrivate Sub Form_Load()
        '保持单一实例
        Set mut = New clsMutex
        If Not mut.CheckMutex("an unique string") Then End
    End Sub