Afficher le programme quand je double-clique sur l'icone

Résolu
Signaler
Messages postés
43
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
31 octobre 2006
-
Messages postés
43
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
31 octobre 2006
-
Bonsoir!

Voilà en faite j'ai besoin de vos idées et expérience.

Ce que j'aimerai faire en faite c'est que quand je démarre mon programme, il regarde si son processus existe déjà(c'est a dire si l'application est déjà lancé) et dans ce cas, fermer le nouveau processus et basculer le programmes déjà lancé a l'écran.

En d'autre mot, quand je clique sur l'icone de mon programme, ca lance ce dernier ou ca l'affiche a l'écran... exactement comme fait Windows Media player.

Donc, j'ai pensé là choses suivante:

Au démarrage du programme, je regarde avec GetCurrentProcess()
si il existe déjà un processus portant le meme nom (et pas le meme ID). Si la condition est true, ca ferme.

Maintenant j'aimerai savoir si il est possible a partir de ca de basculer l'affichage au programme qui a été testé dans ma condition...

Merci pour votre aide

cpadmin

2 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut,

Une version avec les processus :
( dans les commentaires il y a un exemple pour afficher la fenêtre au premier plan. )
http://www.csharpfr.com/codes/EMPECHER-APPLIC-LANCER-FOIS_20698.aspx


une version avec un mutex :
http://www.csharpfr.com/code.aspx?ID=11548
Messages postés
43
Date d'inscription
lundi 12 juin 2006
Statut
Membre
Dernière intervention
31 octobre 2006

Je suis allé regarder et j'y ai trouver mon bonheur!


J'ai fait comme ca:

j'ai ouvert programm.cs

j'ai ajouter les directives suivante:

    using System.Diagnostics;

    using System.Runtime.InteropServices;


dans "static class":

private const int SW_RESTORE = 9;

[DllImport("C:\\Windows\\System32\\user32.dll")]

public static extern int ShowWindowAsync(IntPtr hWnd, int nCmdShow);


dans "void main":

Process Process_new = Process.GetCurrentProcess();

Process[] Process_old = Process.GetProcessesByName(Process_new.ProcessName);

            foreach (Process Processus in Process_old)

                if (Process_new.Id != Processus.Id)

                {

                    if (Process_new.ProcessName == Processus.ProcessName)

                    {

                        ShowWindowAsync(Process_old[1].MainWindowHandle, SW_RESTORE);

                        return;

                    }

                }

Merci pour ton aide Lutinore!