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

Résolu
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006 - 30 août 2006 à 20:56
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006 - 31 août 2006 à 10:34
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
31 août 2006 à 04:50
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
3
cpadmin Messages postés 43 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 31 octobre 2006
31 août 2006 à 10:34
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!
3
Rejoignez-nous