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 :

Focus et Close d'une fenetre C#


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut Focus et Close d'une fenetre C#
    Bonjour !

    J'ai actuellement une fenetre "Form2". Celle ne devrait pas pouvoir être fermée. J'ai essayé de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
            }
    mais ca ne fonctionne pas ... je ne sais pas pourquoi ...

    Un autre problème concerne le focus de cette fenetre. J'ai selectionné "TopMost : true" et j'ai fait un timer qui donne le focus a cette fenetre toutes les 100 Millisecondes mais voila avec " alt + tab " la barre de menu demarrer apparait et garde le focus. Comment empecher cela ?

    derniere question :

    Comment met on fin a tout le programme ?


    Merci
    .-*K.E.U.B*-.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par keub51
    Bonjour !

    J'ai actuellement une fenetre "Form2". Celle ne devrait pas pouvoir être fermée. J'ai essayé de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
            }
    mais ca ne fonctionne pas ... je ne sais pas pourquoi ...
    Très étrnage, c'est normalement la technique utilisée...

    Attention, cet évènement n'est pa déclenché lors de l'appel à Application.Exit (cf http://msdn2.microsoft.com/fr-fr/lib...ng(VS.80).aspx)

    Comment fermez-vous la fenêtre ?
    Comment met on fin a tout le programme ?
    Application.Exit

  3. #3
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    tu as un dialog result sur tes boutons, c'est pour cela que ca se fait fermer a tout coup. Jte gage que ta form est en Modal. Car le dialog result ferme seulement les form en style modal.

    Donc meme si tu fait e.cancel=true dans le form_closing, ta form est fermer pareil!

    Si jamais tu veux fermer la fenetre avec un dialog result, ce que tu peux faire c'est de pas mettre de dialogresult sur ton bouton ok/save et sur son click tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this.dialogresult = dialogresult.ok
    this.close()
    Bref tout ca pour te dire que ta form va tjrs se faire fermer a cause de ton dialog result sur ton bouton!
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  4. #4
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    donc tout ca pour dire que je ne pourrais pas l'empecher de se fermer ?


    et en ce qui concerne mon probleme de barre de demmarrage qui garde le focus ?

    merci
    .-*K.E.U.B*-.

  5. #5
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    est ce qu'il est possible de bloquer la touche "alt" ? ca resoudrai mes deux probleme ...
    .-*K.E.U.B*-.

  6. #6
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public void Form2_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode.ToString() == "Alt")
                {
                    // When the user presses both the 'Alt' key and 'F' key,
                    // KeyPreview is set to False, and a message appears.
                    // This message is only displayed when KeyPreview is set to True.
     
                    MessageBox.Show("ca marche !");
                }
            }
    j'ai essayé cette methode mais rien n'apparait ... pourquoi ?
    .-*K.E.U.B*-.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Bloquer alt?...

    En regardant ton code : focus obligatoire sur une fenetre ; empecher de la fermer, bloquer alt tab...

    Je me demande bien quel genre de programme tu compte créer.

    A vu de nez un programme que jaurais envie de flinguer...

    Heureusement pas mal de gens connaissent control alt suppr -_-

  8. #8
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    lol c'est vrai que c'est douteux comme programme mais il n'en n'est rien :

    En fait j'essaye de faire un programme pour un cyber café qui restreint l'acces aux utilisateur ... ces derniers doivent s'identifier par leur numéro de carte pour bénéficier d'un acces de 45 minutes ... au bout de ces 45 minutes le programme reprend le controle ...

    donc voila jsuis pas un petit hackeur mais juste un gars en stage mdr

    Et j'ai besoin de bloquer alt pour enlever la possibilité de faire " alt + tab " et " alt + f4 " mais avec mon code il n'arrive meme pas a repérer lorsque j'appuie sur une touche ...

    si quelqu'un a une idée ...
    .-*K.E.U.B*-.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    http://msdn2.microsoft.com/en-us/lib...oc(VS.71).aspx

    Regarde du coté de la WndProc, tu aura accès à tous les messages qui circulent, et tu pourra controler complètement l'appli.

  10. #10
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    ca ne m'aide pas beaucoup ... a vrai dire je ne pense pas avoir le niveau pour comprendre toutes ces subtilitées... si quelqu'un aurait la gentillesse de faire le prof, je l'en remercie d'avance. c'est ma premiere appli en C# donc voila, j'ai els bases mais pas +...
    .-*K.E.U.B*-.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    En gros :
    Windows fonctionne avec des messages.
    Lors de l'appuit sur une touche, le message est envoyé à l'appli en cours,
    mais pas uniquement.

    Une touche comme alt, sera donc avant analysé par windows et peut etre intercepté par une autre.

    Windows détectera la touche alt activé, l'enverra à ton appli ; si l'utilisateur fait aussi Tab, Windows le détectera et agira en conséquence. Je ne suis meme pas sur que Tab soit distribué à l'appli ensuite, puisque c'est un raccourcit windows.

    Il faudrait donc écouter tous les messages windows pour détecter le alt tab...

    http://www.devsource.com/article2/0,1895,1969408,00.asp

  12. #12
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    waw !

    jpensais pas que ca serait si compliqué ...

    alors il faut ecouter les messages de windows pour avoir le alt + tab. mais moi c juste le alt que je veux bloquer pour eviter d'un seul coup : alt + f4 et alt + tab. donc ce n'est peut etre pas la peine de se lancer dans l'ecoute de tous les messages windows.

    j'ai dl sur codes source un prgme tres interressant que j'ai trouvé grace a vos liens :

    Le code présenté permet donc de lancer un blocage des touches :
    - "windows" (celles qui ouvrent/ferment le menu démarrer)
    - ctrl+echap (même chose que les touches win)
    - alt+tab
    - alt+echap (alt+tab-like)


    Associé à :
    - désactivation du Gestionnaire des taches (a regler via l'execution de gpedit.msc, il y a un reglage pour ctrl+alt+suppr)
    - appli en plein ecran
    - desactivation de la reduction et du changement de taille (le FormBorder sur None est pas mal dans son genre )
    - gestion de l'event Closing (mot de passe pour que l'admin puisse quitter mais pas l'utilisateur ?)


    Donc j'ai regardé d'un peu plus pres le programme et voila il bloque les touches lorsque l'on coche la case du form1 donc lorsque :

    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
     
    		#region Les fonctions de la dll qui vont nous servir
    		[DllImport("sw_hook.dll")]
    		private static extern bool InstallHook(IntPtr hwnd);
     
    		[DllImport("sw_hook.dll")]
    		private static extern bool UninstallHook(IntPtr hwnd);
    		#endregion
     
    		private void checkBox_CheckedChanged(object sender, System.EventArgs e)
    		{
    			if ( checkBox.Checked == true)
    			{
     
    				// installation du hook
    				if (!InstallHook(this.Handle))
    				{
    					MessageBox.Show("Echec install");
    					Close();
    				}
    			}
    			else
    			{
    				// désinstallation du hook
    				if ( !UninstallHook(this.Handle))
    				{
    					MessageBox.Show("Echec uninstall");
    					Close();
    				}
    			}
    		}
    donc d'apres ce que je comprends il faut interagir avec une dll : sw_hook.dll.
    et le tout en integrant du C++ :

    La solution comprend le projet d'une dll C++ (eh vi j'avais pas le choix) :
    "Global Hook Is Not Supported in .NET Framework
    You cannot implement global hooks in Microsoft .NET Framework. To install a global hook, a hook must have a native dynamic-link library (DLL) export to inject itself in another process that requires a valid, consistent function to call into. This requires a DLL export, which .NET Framework does not support. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically."

    Il faut donc une petite dll, et pas nos chères MSIL .
    Cependant le hook présenté ici n'est pas ce que je qualifierais de "complet".
    En effet le traitement des messages (blocage ou non) est effectué dans le code C++.
    Il s'agit donc pour cet exemple de simplement montrer comment faire pour l'utiliser dans notre code C#.
    Je suis motivé pour apprendre comment faire mais je ne comprends pas tres bien les liens entre les appels de fonctions et tout et tout ... si quelqu'un pouvait m'aider ...
    .-*K.E.U.B*-.

  13. #13
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    bon bah voila il ne me reste plus qu'un seul truc a bloquer :

    - "windows" (celles qui ouvrent/ferment le menu démarrer)
    - ctrl+echap (même chose que les touches win)

    comment faire ?
    .-*K.E.U.B*-.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Hmmm pas mal, tu as réussi as avancé assez vite sur un truc quand meme complex...

    Pour la touche windows, il va peut etre falloir que tu tripattouille les dll que l'on ta fournit, et que tu récupères leur code pour les intercepter également...

  15. #15
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    oué merci mais la j'y connais vraiment rien du tout je ne sais pas comment importer une dll recuperer et implementer ses fonctions ... jtrouve aucun tutorial ( en francais ) c'est dommage qu'il n'y en a pas sur ce forum ... il n'y a que les bases en C#.

    Quelqu'un peut t'il expliquer simplement et concretement quel procédé suivre ? franchment ca m'aiderai beaucoup. car j'ai beau regarder au code que j'ai fourni un peu plus haut je ne comprends pas grand chose ...

    En plus il ne me reste plus que ca et j'ai fini
    .-*K.E.U.B*-.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Ya pas la source des dll?

  17. #17
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    quest ce que tapelle la source des dll ?

    ( et oui je ne vous avez pas menti en vous disant que je galere avec ces dll lol )

    je pense que je dois utiliser : sw_hook.dll.

    En tout cas c'est celle ci qui est utilisée il me semble dans le code source precedent...
    .-*K.E.U.B*-.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Dans les sources fournies, il n'y a pas un projet qui créer cette dll?

    C'est un projet type Bibliothèque : Il ne pond pas un exe mais une dll donc^^

    Ce sera un projet c++ managed mixé avec c++ natif...

  19. #19
    Membre régulier Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 116
    Points
    116
    Par défaut
    en fait la dll est la pour faire le lien entre le c et c# ?
    .-*K.E.U.B*-.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Pour faire du hooking il faut bosser en c++.
    Pour intégrer une dll Win32 en C# il faut un PInvoke ou une dll en c++ managed qui permet de faire le lien avec le c++ (si je me rapelle, ca commence a dater... )

    Ton lien ne marche pas... Mais je l'ai retrouvé plus bas^^

    Donc tu as bien le projet écrit en c++, tu va devoir fouiller dedans. Mais comme tu as remarqué la note : le ctrl alt suppr ne marche pas dans sa dll.


    Tu as maté ces trucs la :

    REFERENCES :

    HOW TO: Set a Windows Hook in Visual C# .NET
    http://support.microsoft.com/?kbid=318804

    Disabling Keys in Windows XP with TrapKeys (C++, mais sa desactivation du ctrl+alt+suppr marche pas chez moi)
    http://msdn.microsoft.com/msdnmag/is...A/default.aspx



    Tu as bien Visual Studio et pas une version express C# au fait?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Window.Close() sur une fenetre fille ferme l'application
    Par MonsieurHelmut dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 30/10/2009, 16h59
  2. Réponses: 0
    Dernier message: 20/01/2008, 11h18
  3. bloquer le focus à une fenetre
    Par titip dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/08/2007, 15h16
  4. Pb de focus sur une fenetre modal
    Par TheReturnOfMuton dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 24/04/2007, 11h43
  5. donner le focus a une fenetre
    Par HiT dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 03/05/2006, 14h59

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