Les Snippets

Connexion

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

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 31/08/2006 16:47:47 et initié par Renfield [Liste]
Date de mise à jour : 07/10/2006 16:30:16
Vue : 6484
Catégorie(s) : Système
Langages dispo pour ce code :
- VB6
- VB6
- Windev
- Windev
- Delphi 5
- C# 1.x, C# 2.x



Langage : VB6
Date ajout : 31/08/2006
Posté par Renfield [Liste]
DateMAJ : 06/09/2006
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
Remarque :
L'avantage par rapport a l'instruction App.PrevInstance de VB, c'est qu'ici, l'éventuelle première instance sera réactivée.
Langage : VB6
Date ajout : 05/09/2006
Posté par vbPink [Liste]
Public Function IsAlreadyRunning() As Boolean
    IsAlreadyRunning = App.PrevInstance
End Function

Langage : Windev
Date ajout : 12/09/2006
Posté par Elian Lacroix [Liste]
DateMAJ : 07/10/2006
Le comportement de l'application est déterminé lors de la création de son exécutable,
aucune programmation n'est requise pour cela
(cf. menu "Atelier ... Générer l'Exécutable Windows").
Langage : Windev
Date ajout : 06/10/2006
Posté par drcharly93 [Liste]
DateMAJ : 07/10/2006
(complément du snippet ci-dessus)
Cependant on peut tester la présence d'un executable en mémoire
Nb est un entier
Nb = ExeLancé(<Nom de l'exe>)

Langage : Delphi 5
Date ajout : 09/01/2008
Posté par Caribensila [Liste]

var HandleMutex : THandle;


function IsRunning : Boolean;
  begin
  result := true;
  SetLastError(NO_ERROR);
  if OpenMutex(MUTEX_ALL_ACCESS,false,pChar('MonMtx'))<>0 then exit;
  HandleMutex  := CreateMutex(Nil,true,pChar('MonMtx'));
  if HandleMutex = 0 then ShowMessage('Erreur de Mutex')
                              else result := false;
end;


procedure TForm1.FormCreate(Sender: TObject);
  begin
  if IsRunning then Halt;
end;


procedure TForm1.FormDestroy(Sender: TObject);
  begin
  if HandleMutex <> 0 then ReleaseMutex(HandleMutex);
end;


Langage : C# 1.x , C# 2.x
Date ajout : 28/02/2008
Posté par fhervoue [Liste]
using System.Threading;
protected const string APP_UNIQUE_ID = "0F054E71-9E49-42f0-9782-A0DF741D3F8E";
/// <summary>

protected
/// Point d'entrée principal de l'application.

/// </summary>

[STAThread]
static void Main() 
{

	using (Mutex __mutex = new Mutex(false, @"Global\" + APP_UNIQUE_ID)) // unique pour toutes les sessions

	//using(Mutex __mutex = new Mutex(false, APP_UNIQUE_ID)) // unique uniquement pour la session en cours

	{
if(!__mutex.WaitOne(0, false))
		{

			MessageBox.Show("Application déja lancée.");
return;
		}

		GC.Collect(); 
Application.Run(new Form1());
	}

}


Snippets en rapport avec : Instance, Unique, Application



Codes sources en rapport avec : Instance, Unique, Application

{JAVA / J2EE} INSTANCE UNIQUE D'UNE APPLICATION
La demande revenant souvent sur les forums (et ayant cherché moi-même par le passé), j'ai développé ...

{JAVA / J2EE} INSTANCE UNIQUE D'UN PROGRAMME (SANS SOCKET NI FICHIER)
Salut à tous, voici l'idée : une classe nommée essaie de renommer le jar en app_tmp.jar, si ...

{C# / C#.NET} INSTANCE UNIQUE + COMMUNICATION DE MESSAGES (COMPATIBLE 32 ET 64 BIT)
Cette DLL permet d'avoir une instance unique d'un programme en plus de permettre: 1. La communicat...

{JAVA / J2EE} UNE SEULE INSTANCE DE PROGRAMME SANS SOCKET
Dans le cadre d'un projet, je devais mettre en place un système multi-agents sur un réseau très sécu...

{Visual Basic, VB6, VB.NET, VB 2005} INSTANCE UNIQUE DE VOTRE APPLICATION
App.PrevInstance, oui, ok... mais ca ne permet que de savoir si l'exe courant a été lancé ou non....

{C / C++ / C++.NET} UNIQUE INSTANCE PROG (WIN32)
2 projets dans le zip pour 2 methodes. Les 2 methodes ramenent, si c'est le cas, l'ancienne instanc...

{PHP} MYRSSREADER :: APPLICATION WEB2
DEMO SUR : http://rss.amezghal.com | =================================== Salut, MyRSS est une app...

{C / C++ / C++.NET} RANGESOURIS
c'est un petit code qui a pour bute de ranger la souris quand l'utilisateur ne la bouge pas pendant ...

{Visual Basic, VB6, VB.NET, VB 2005} HANDLISTER
Ce petit programme permet de surveiller les applications qui sont démarrées ou arrêtées et d'écrire ...

{Python} OPTI2 OU COMMENT OPTIMISER WINDOWS XP ET/2000 EN QUELQUES CLICS
Opti2 est un soft d'optimisation de windows xp et/ou 2000. Il comprend une vingtaine d'optimisati...