IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C# 2.0] Masquer une application dans le ALT+TAB


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Points
    7 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Par défaut [C# 2.0] Masquer une application dans le ALT+TAB
    Bonjour,

    Après différentes recherches qui me renvoient toutes sur la même solution à peu de choses près, je n'arrive pas à faire ce que je souhaite.

    J'ai donc essayé ceci, mais ca ne fonctionne pas.

    J'ai aussi testé ce code sur la Form, à priori ca revient au même que le code précédent, en plus sympa peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected override CreateParams CreateParams {
          get {
            // Turn on WS_EX_TOOLWINDOW style bit
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x80;
            return cp;
          }
        }
    sans résultat.

    Toutes les solutions que je "trouve" pour le moment utilisent le même principe et aucune ne fonctionne donc.

    Alors comment faire pour ne pas voir son application dans le ALT+TAB ?

    Merci.

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Points
    958
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Par défaut
    Aucune idéé, il doit pourtant y avoir une fonction win32 qui doit régler cela.

    Par contre, je serais intéressé de savoir pourquoi tu souhaites faire cela?

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Points
    7 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Par défaut
    Tout simplement parce que j'ai une application A qui pilote une application B (par défaut cachée, juste un NotifyIcon de visible) et que seule l'application A doit permettre de lancer la B, on ne doit pas pouvoir y accéder autrement.

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Points
    7 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Par défaut
    Bon, j'ai trouvé comment faire. J'avais utilisé ca au début mais c'était infructueux et je viens de trouver pourquoi.

    permet de masquer une Form de partout (barre de tâches, ALT+TAB, ...) mais il faut le faire au niveau de l'événement Shown, au plus tôt.

    Je le faisais dès le constructeur de ma Form, mais la Form est affichée entre temps et le Visible ne peut ête utilisé qu'à partir du moment où elle a été affiché, enfin on dirait que ca fonctionne comme ca en tout cas et c'est donc pour ca que je suppose qu'on ne peut l'utiliser qu'au plus tôt à partir de l'événement Shown.

    Je ne mets pas résolu de suite, car si d'autres personnes ont une expérience sur le Visible j'aimerais bien savoir si vraiment il faut que la Form ai été affichée pour pouvoir utiliser le Visible à false. Parce que pour le moment, on la voit très briévement bien évidemment et il me faut masquer ca tout de même.

    Edit : finalement j'ai trouvé une astuce qui me convient parfaitement.

    Dans le constructeur de ma Form je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.Opacity = 0
    this.ShowInTaskbar = false;
    et dans l'événement Shown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.Opacity = 1
    this.ShowInTaskbar = true;
    Ca permet d'éviter le clignotement que j'avais et c'est nickel ^^

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Points
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Par défaut
    Salut StormimOn,

    je pense que dans ton appli, tu dois lancer ton appli à masquer avec un mon_appli.Show() ou un Application.Run(mon_appli), dans les deux cas, à un moment donné, la propriété form.Visible sera passée à true. Pour eviter ca, tu ne dois jamais afficher la fenetre en n'appellant aucune des deux methodes precitées. Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
        public partial class Form1 : Form
        {
            static Form1 f;
     
            public Form1()
            {
                InitializeComponent();
                notifyIcon1.Icon = SystemIcons.Exclamation;
                notifyIcon1.DoubleClick += new EventHandler(notifyIcon1_DoubleClick);
            }
     
            void notifyIcon1_DoubleClick(object sender, EventArgs e)
            {
                this.Visible = !this.Visible;
                if (this.Visible)
                    this.BringToFront();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                this.Dispose();
                Application.ExitThread();
            }
     
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                f = new Form1();
                Application.Run();
            }
        }
    ici j'ai une form comportant un Button (nommé button1 qui dispose la form) et un composant NotifyIcon. J'instancie une nouvelle Form1 f, et je lance une boucle de message (Application.Run) sans preciser de form en argument, ce qui a pour effet de lancer une boucle sans form qui s'affichera. Le NotifyIcon est en Visible = true (dans le InitializeComponent du ctor) et donc sera affiché. En double-cliquant dessus, cela affichera ou masquera ma form.

    Pour note, a tout hasard, etant donné que j'ai lancé une boucle sans preciser de form, le fait de disposer la form ne fera pas sortir le thread courant de la boucle, on doit le faire à la main (le Application.ExitThread() dans le callback du button1) sinon le form sera disposée mais l'application ne se terminera pas, la boucle attendant toujours les events du systeme.

    A noter aussi qu'en faisant comme ca, tu ne peux pas invoker ton thread d'ui pour toucher à la form avant que le handle de la form ne soit créé (car invoke cherche le thread surlequel marshallé par les handles de fenetre), il faut appeller d'abord la methode protégée de Form maFormPasAffichée.CreateHandle() (dans le ctor par exemple), cette derniere etant normalement appelé quand tu fais un get sur maFormPasAffichée.Handle (ce qui est fait si tu mets Visible = true).

    En esperant que ca t'aide un peu, c'est de cette manière que j'avais reussi à faire une appli "NotifyIcon-only".

    Bon courage.

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Points
    7 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Par défaut
    Dans le cas présent, ma Form utilise des composants qui prennent le pas sur le Show j'ai l'impression (à vérifier avec celui qui a fait les composants au boulot) donc je reste sur ma solution en attenant.

    En tout cas merci pour ton exemple SirJulio, ca me servira prochainement quand même

  7. #7
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Points
    410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Par défaut
    Salut

    Pourquoi le pas "definir" l application en question comme service ?....

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Points
    7 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Par défaut
    L'application appelante est un peu particulière, du point de vue de la techno utilisée, et impossible d'utiliser un service au final, enfin soit c'est impossible soit je n'ai pas encore trouvé comment faire ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Masquer l'application dans la barre des tâches
    Par jmjmjm dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/11/2016, 13h50
  2. Placer une application dans la barre de tache ou la masquer
    Par Vincinho dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/12/2009, 11h30
  3. [VS 2005] atteindre une application dans le navigateur
    Par cortex024 dans le forum Visual Studio
    Réponses: 9
    Dernier message: 19/04/2006, 20h03
  4. Réponses: 10
    Dernier message: 05/12/2005, 00h12
  5. [SP2] Comment débloquer une application dans le SP2
    Par Furius dans le forum Windows XP
    Réponses: 6
    Dernier message: 13/11/2005, 23h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo