N'autoriser qu'une seule instance de l'application

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 662 fois - Téléchargée 9 fois

Contenu du snippet

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

Compatibilité : VB6

Disponible dans d'autres langages :

A voir également

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.