Application ne pouvant être lancé qu'une seule fois

Soyez le premier à donner votre avis sur cette source.

Vue 11 179 fois - Téléchargée 835 fois

Description

C'est un exemple d'application qui ne peux pas se lancer plusieurs fois,
c'est à dire qu'au démarrage de l'application, grâce à un Mutex, elle détecte si c'est la première instance
Si c'est le cas, elle lance sa fenêtre principale
Sinon, elle envoi un message windows personnalisé pour transmettre les arguments de sa ligne de commande
et pour indiquer à la première instance qu'elle doit s'activer (se rendre visible)

C'est pas évident à expliquer, donc je vous invite à regarder le code qui est bien commenté

Source / Exemple :


Liste des importations d'API utilisés

// Permet d'envoyer un message windows sans attendre sa réception
[DllImport( "user32.dll" )]
private static extern int PostMessageA( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam );

// Permet de récupérer un numéro de message personnalisé unique
[DllImport( "user32.dll" )]
internal static extern int RegisterWindowMessage( StringBuilder lpString );

// Permet d'ajouter une chaîne de caractères dans la table des Atomes globaux
[DllImport( "kernel32.dll" )]
internal static extern int GlobalAddAtom( StringBuilder lpString );

// Permet de récupérer la valeur d'un Atome global
[DllImport( "kernel32.dll" )]
internal static extern int GlobalGetAtomName( int atomID, StringBuilder lpString, int nSize );

// Permet de supprimer un Atome global
[DllImport( "kernel32.dll" )]
internal static extern int GlobalDeleteAtom( int atomID );

// Permet de récupérer le handle de la fenêtre de l'application
[DllImport( "user32.dll" )]
internal static extern IntPtr FindWindow( string className, string formName );

Conclusion :


Jeter un coup d'oeil dans la class Program ( celle qui contient la méthode Main )
C'est ici que je teste si une instance de l'application est déjà ouverte
Tout simplement pour éviter d'ouvrir une deuxième fenêtre...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de ricklekebekoi

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.