2

App.Previnstanceこのインスタンスの開始時に前のプログラムが実行されているかどうかに応じて、Trueまたはの値を返します。False

その後、前のインスタンスが終了しても、の値はApp.PrevInstance変更されません。

以前のインスタンスが存在するかどうかをいつでも判断できる関数を作成することは可能ですか?

このためには、日付/時刻プロセスが利用可能になる必要があると思います。この情報はタスク マネージャーからは利用できないように見えるので、Windows がそれを保存するのだろうか?

4

2 に答える 2

2

wqw のコメントのおかげで調べてみたところCreateMutex、まさに私が必要としていたものでした。

ここで以下のコードを見つけました

'Code by Adam Verwijs
Const ERROR_ALREADY_EXISTS = 183&
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
    Dim hMutex As Long
    'Try to create a new Mutex
    hMutex = CreateMutex(ByVal 0&, 1, App.Title)
    'Did the mutex already exist?
    If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
        'Clean up
        ReleaseMutex hMutex
        CloseHandle hMutex
        'More than one instance detected
        MsgBox "More than one instance"
        End
    Else
        'form load code
    End If
End Sub

同じゼロ以外のミューテックスが返されたことを示す編集: 1 つのボタンで新しい vb6 プロジェクトを作成する場合は、以下のコードを挿入し、プロジェクトを作成してから複数のインスタンスを実行すると、すべて同じゼロ以外のミューテックスがあることがわかります。少なくとも私のコンピューターでは (windows vista home basic)

   Option Explicit

Const ERROR_ALREADY_EXISTS = 183&
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Sub Command1_Click()
 Dim hMutex As Long
    'Try to create a new Mutex
    hMutex = CreateMutex(ByVal 0&, 1, App.Title)
    MsgBox hMutex
    'Did the mutex already exist?
    If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
        'Clean up
        ReleaseMutex hMutex
        CloseHandle hMutex
        'More than one instance detected
        MsgBox "More than one instance"


    End If
End Sub

編集 2016-04-17 このコードは使用しないでください!!! 最近まで問題に気付かずに使用していましたが、コンピューターにログインしている複数のユーザー間で機能しないことがわかりました。代わりに、この他のスレッドで wqw の回答を使用してください

于 2013-05-25T14:04:18.727 に答える