Public Function IsAlreadyRunning() As Boolean Dim hMap As Long Dim pMem As Long Dim hPid As Long '# Nous tentons ici d'acceder au mappage (précedemment créé ?) hMap = OpenFileMapping(FILE_MAP_READ, 0, App.Title) If hMap <> 0 Then '# L'application est déjà lancée. pMem = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0) If pMem <> 0 Then '# On récupère le handle vers la précédente fenêtre CopyMemory hPid, ByVal pMem, 4 If hPid Then On Error Resume Next '# On active l'instance précedente AppActivate hPid On Error GoTo 0 End If UnmapViewOfFile pMem End If '# On libère le handle hmap CloseHandle hMap '# et on prévient l'appelant que l'application avait dejà été lancée. IsAlreadyRunning = True Else '# Nous sommes dans la première instance de l'application. '# Nous allons laisser une marque en mémoire, pour l'indiquer hMap = CreateFileMapping(INVALID_HANDLE_VALUE, ByVal 0&, PAGE_READWRITE, 0, 4, App.Title) If hMap <> 0 Then '# On ouvre le 'fichier' en écriture pMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0) If pMem <> 0 Then '# On y écrit le process courant CopyMemory ByVal pMem, GetCurrentProcessId(), 4 UnmapViewOfFile pMem End If '# Pas de CloseHandle hMap ici, sous peine de détruire le mappage lui-même... End If End If End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.