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

C# Discussion :

Empécher la réduction d'une fenêtre


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 372
    Points
    372
    Par défaut Empécher la réduction d'une fenêtre
    Bonjour,

    Utilisant le WPF , j'aimerais pouvoir empécher la réduction d'une fenêtre lors de la combinaison de touche "Windows + D".

    Pour "Windows + M", j'ai fait en sorte que lorsque l'état de la fenêtre change, je la remet à normal. Mais lors du "Windows + D" (ou le raccourcis "Afficher le bureau"), celà ne fonctionne pas.

    Avez-vous des idées ?

    Merci !

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    peut-etre un hook clavier ?

    SInon, regardes ici :

    http://www.pinvoke.net/default.aspx/...terHotKey.html

    http://www.c-sharpcorner.com/Forums/...ThreadID=37767

    Mais j'ai essayé et autant avec Ctrl-D, le test fonctionne, autant avec la touche Windows, le RegisterHotKey (api win32) m'envoie chier... peut-etre que c'est une protection pour éviter de s'enregistrer sur ce type de raccourci

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Peut-être en modifiant la propriété FormWindowState dans l'event Resize de la form, lorsque FormWindowState est égal à Minimized.

    Ou alors, mais pas sur que ce soit exactement ce que tu espères, en utilisant la propriété TopMost de la form qui alors ne pourra pas non plus passer en arrière plan.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 372
    Points
    372
    Par défaut
    Bonjour et merci de vos réponses. Pour la solution de theMonz31, je n'ai pas réussi ..

    Peut-être en modifiant la propriété FormWindowState dans l'event Resize de la form, lorsque FormWindowState est égal à Minimized.
    Déjà essayé, marche pour le "Windows+M", mais pas le "Windows+D".

    Pour TopMost, il ne faut pas que la fenêtre reste toujours en premier plan.

    Merci à vous quand même

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    sinon, tu peux feinter en faisant comme celà :

    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
    private void Form1_Load(object sender, EventArgs e)
            {
                timer = new Timer();
                timer.Tick += new EventHandler(timer_Tick);
                timer.Interval = 1000;
                timer.Start();
            }
     
            void timer_Tick(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.WindowState = FormWindowState.Normal;
                }
                this.Visible = true;
            }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Points : 93
    Points
    93
    Par défaut
    C'est quand même un besoin barbare. Tu programmes un virus ou quoi ? Sinon il n'y a aucune raison de vouloir un tel comportement.

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    un virus en C#... concept intéressant ma foi

    En dehors de la solution du timer, simple et efficace... faut juste gérer après le cas de demande (genre un flag qui permet de savoir si le "minimized" est demandé par ton application ou bien par l'OS

  8. #8
    Membre du Club
    Profil pro
    Coach Agile
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 56
    Points
    56
    Par défaut
    C'est peut être une réponse basique mais il me semble que cela fonctionne.
    Dans le code xaml de ta fenêtre tu à un attribut "ResizeMode", et utilise la valeur "NoResize". Il me semble que cela fonctionne.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 372
    Points
    372
    Par défaut
    @theMonz31 : J'ai déjà essayé aussi ^^ barbare mais ne marche pas

    @NokyDaOne : C'est pour faire une sorte de widget sous XP, mais de toute façon, ce n'est pas pour avoir ce genre de réponse débile que j'ai posté.

    @akkai : Ne fonctionne pas non plus

    Merci pour vos réponses en tout cas

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    sous Windows 7, ma solution fonctionne chez moi

  11. #11
    Membre du Club
    Profil pro
    Coach Agile
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 56
    Points
    56
    Par défaut
    Tu peux essayer de force l'activation de la fenêtre avec un trigger gu genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <trigger property="isActivated" Value="false">
       <setter  property="isActivated" Value="true"/>
    </trigger>
    un truc dans le genre

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par matpush Voir le message
    @NokyDaOne : C'est pour faire une sorte de widget sous XP, mais de toute façon, ce n'est pas pour avoir ce genre de réponse débile que j'ai posté.
    Si les widgets arrivent à faire qqch qu'une appli standard ne peut pas faire, pourquoi ne vas-tu pas chercher l'API des widgets plutôt que ce gros hack ? Cela te permettra d'avoir un programme plus stable et plus maintenable.

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 372
    Points
    372
    Par défaut
    @theMonz31 : On devrait passer sous Seven dans pas longtemps (tout est relatif) dans ma boite, donc je me dis que je finierai par avoir une solution .

    @NokyDaOne : Je n'ai pas connaissance d'un "framework" dotnet pour des widget sous xp (pourtant, j'ai cherché). Si tu as quelque chose, ça pourrait m'intresser

  14. #14
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    pour XP, un mec fait comme dans cet article :

    Gadget for XP

    Maintenant, la notion de Widget, Gadget étant Vista / Seven... cela me semble "pertinent" d'offrir le truc uniquement pour ces 2 OS (meme si je peux comprendre l'envie de l'avoir sous XP)

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par matpush Voir le message
    @theMonz31 : On devrait passer sous Seven dans pas longtemps (tout est relatif) dans ma boite, donc je me dis que je finierai par avoir une solution .

    @NokyDaOne : Je n'ai pas connaissance d'un "framework" dotnet pour des widget sous xp (pourtant, j'ai cherché). Si tu as quelque chose, ça pourrait m'intresser
    J'ai tjs supposé que google ou autres utilisaient un FrameWork spécial pour obtenir leurs widgets sous XP, mais peut-être me suis-je trompé.

  16. #16
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    Ca donnerait celà comme code en C#

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    public partial class Form1 : Form
        {
            delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType,
        IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
     
            [DllImport("user32.dll")]
            static extern IntPtr SetWinEventHook(uint eventMin, uint eventMax, IntPtr
               hmodWinEventProc, WinEventDelegate lpfnWinEventProc, uint idProcess,
               uint idThread, uint dwFlags);
     
            [DllImport("user32.dll")]
            static extern bool UnhookWinEvent(IntPtr hWinEventHook);
     
            private enum SystemEvents : uint
            {
                EVENT_SYSTEM_CREATE = 3,
                EVENT_SYSTEM_DESTROY = 0x8001,
                EVENT_SYSTEM_MINIMIZESTART = 0x0016,
                EVENT_SYSTEM_MINIMIZEEND = 0x0017,
                EVENT_SYSTEM_FOREGROUND = 0x0003,
                EVENT_SYSTEM_MENUSTART = 0x0004,
                EVENT_SYSTEM_MENUEND = 0x0005,
            }
     
            public void WinEvenHooker(IntPtr even, uint type, IntPtr hwn, int obj, int child, uint dwthread, uint dwms)
            {
                //MessageBox.Show("Event Hooker");
                if (type == (uint)SystemEvents.EVENT_SYSTEM_FOREGROUND)
                {
                    Trace.WriteLine("Event foreground");
                    this.WindowState = FormWindowState.Normal;
                }
            }
     
            IntPtr globalHook = IntPtr.Zero;
     
            public Form1()
            {
                InitializeComponent();
                FormClosing += new FormClosingEventHandler(Form1_FormClosing);
                globalHook = SetWinEventHook((uint)SystemEvents.EVENT_SYSTEM_FOREGROUND, (uint)SystemEvents.EVENT_SYSTEM_FOREGROUND, IntPtr.Zero,
                    WinEvenHooker, 0, 0, 0);
            }
     
            void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                UnhookWinEvent(globalHook);
            }
        }
    Test fonctionnel sous Windows 7... (désolé, j'ai pas de XP sous la main)

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2009, 17h49
  2. empêcher la fermeture d'une fenêtre par Alt+F4
    Par doderic dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 25/08/2008, 17h11
  3. Empêcher la réduction d'une fenêtre
    Par pandore1983 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 16/03/2008, 21h08
  4. Réponses: 1
    Dernier message: 21/12/2007, 21h27
  5. Agrandissement/Réduction d'une fenêtre
    Par nurbo_2056 dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/12/2006, 20h55

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