Reduire mon application console dans le Systray [Résolu]

Signaler
Messages postés
59
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
21 août 2007
-
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
-
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

Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

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.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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]
Messages postés
59
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
21 août 2007
7
Ok je vais donc integrer ma console dans une appli graphique.
Puis, rajouter un truc pour le SysTray.
Merci à tous,

a+
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
il y a un composant SystrayIcon dans la toolbox des Windows Forms.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.
Messages postés
59
Date d'inscription
dimanche 29 avril 2007
Statut
Membre
Dernière intervention
21 août 2007
7
Ok thanks
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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]
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.