Reduire mon application console dans le Systray

Résolu
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 - 21 août 2007 à 01:19
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 21 août 2007 à 18:26
Bonjour,
J'aimerais réduire au lancement de mon application "console" le programme dans le systray.
Est-ce possible ?

Merci d'avance.

11 réponses

PurBonheur Messages postés 66 Date d'inscription samedi 24 février 2007 Statut Membre Dernière intervention 7 octobre 2007 1
21 août 2007 à 02:05
Salut,

"Est-ce possible ?"

Non, ce n'est pas possible. Le NotifyIcon est dans l'espace de nom System.Windows.Forms, donc pas accessible par une application console.

A plus.
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
21 août 2007 à 16:19
Ce bug commence à me courrir sur le popotin... Bon je disais...

Ben si c'est une question de références, crée un projet console, ajoute la référence System.Windows.Forms (et Drawing pour mettre une icone) et ce code :

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            NotifyIcon notifyIcon = new NotifyIcon();
            notifyIcon.Icon = System.Drawing.SystemIcons.Application;
            notifyIcon.Visible = true;
            Console.ReadKey();
        }
    }
}

Marche parfaitement et utilise une NotifyIcon...

<hr size="2" width="100%" />Julien.
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
21 août 2007 à 07:11
Salut,
En quoi est-ce une impossibilité PurBonheur ? Il suffit alors d'ajouter la référence en question au projet, et ça devient possible...

<hr size="2" width="100%" />Julien.
1
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 août 2007 à 09:02
non... je rejoins PurBonheur... une application console n'a rien à voir avec une application WindowsForms... et ce n'est pas une question de référence ou de namespace

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
21 août 2007 à 11:02
Ok je vais donc integrer ma console dans une appli graphique.
Puis, rajouter un truc pour le SysTray.
Merci à tous,

a+
1
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 août 2007 à 11:06
il y a un composant SystrayIcon dans la toolbox des Windows Forms.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
1
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
21 août 2007 à 16:22
Ho ! Mon message vide a été retiré, j'ai été victime du bug supprimant le corps du message, ne pensez pas que je traite quiconque de bug dans mon précédant...

<hr size="2" width="100%" />Julien.
1
madshell Messages postés 59 Date d'inscription dimanche 29 avril 2007 Statut Membre Dernière intervention 21 août 2007 7
21 août 2007 à 16:28
Ok thanks
1
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 août 2007 à 16:42
oui... j'ai supprimé ton message vide...
Ce bug sera corrigé pour la nouvelle version de CS... patience.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
1
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
21 août 2007 à 16:56
c'est bien beau d'afficher l'icone dans la systray... mais ca ne sert à rien puisque tu ne peux pas masquer/afficher la console...

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
21 août 2007 à 18:26
Pff facile :

        [System.Runtime.InteropServices.DllImport("user32")]
        static extern int SetWindowPos(IntPtr hwnd, int hwndInsertAfter,
                   int x, int y, int cx, int cy, int Flags);

        static IntPtr handle;
        static bool visible;

        static void Main(string[] args)
        {
            handle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
            NotifyIcon notifyIcon = new NotifyIcon();
            notifyIcon.Icon = System.Drawing.SystemIcons.Application;
            notifyIcon.Visible = true;
            notifyIcon.Click += new EventHandler(notifyIcon_Click);
            MasquerConsole();
            visible = false;
            Application.Run();
        }

        static void notifyIcon_Click(object sender, EventArgs e)
        {
            if (visible) MasquerConsole();
            else AfficherConsole();
            visible = !visible;
        }

        static void AfficherConsole()
        {
            SetWindowPos(handle, 0, 0, 0, 0, 0, 0x43);
        }

        static void MasquerConsole()
        {
            SetWindowPos(handle, 0, 0, 0, 0, 0, 0x83);
        }

Bon allez j'avoue, c'est vrai que c'est pas top, n'empêche que c'est pas hyper compliqué quand même...

<hr size="2" width="100%" />Julien.
0
Rejoignez-nous