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 :

Message utilisateur + exception


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut Message utilisateur + exception
    Bonjour

    j'essaie d'intercepter un message windows lancer dpuis une DLL.
    En suivant la FAQ C#
    j'ai implementer dans la classe de ma form

    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
     
    namespace Winapp1
    {
        public partial class Form1 : Form
        {
    public const UInt16 WM_USER = 0x7FFF;
    public const UInt16 WM_TEST = WM_USER + 100;
    protected override void WndProc(ref System.Windows.Forms.Message m)
            {
                switch (m.Msg)
                {
                    // Fenêtre activée
                    case WM_TEST:
                        //... 
                        MessageBox.Show("WM_TEST receive", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        break;
                    // ...
                }
            }
    Je 'ai pas de souci a la compilation mais au lancement j'ai le message d'erreur suivant
    An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.Windows.Forms.dll

    Additional information: Erreur lors de la création d'un handle de fenêtre.
    et le debug arrive a cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.Run(new Form1());
    Je ne sais pas si j'ai mal placé la fonction wndproc, dans tous les cas si je mets la fonction en commentaire le programme se lance.

    Si quelqu'un peut me donner une piste ou une autre façon d'intercepter mon message je suis preneur

    cordialement

  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 195
    Points
    5 195
    Par défaut
    salut

    J'suis pas sur à 100% que le fait de mettre un MessageBox.Show() dans
    ton handle de wndProc soit des plus réalisables

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    C'est juste pour voir ci le message est intercepté , mais je peux mettre n'importe quoi avec un point d'arret.
    en mettant d'ailleurs une ligne fictive j'ai le meme probleme

    Merci!!

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

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

    tu overrides WndProc sans rappeler la base, tous tes messages windows passent à la trappe, de fait ca plante. Quand tu la commentes, c'est Form.WndProc qui est appelé donc ca ne plante plus. En bref, "base.WndProc(ref m)". =)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    bonjour

    Merci en effet je n'ai plus l'exception.
    Par contre je ne recoit pas mais message utilisateur de ma DLL.

    J'ai essayé importer les fonctions sendMessage et postmessage et d'envoyer de ma propre appli le WM_TEST sans plus de resultat.
    il passe bien dans le wndproc mais aucun message utilisateur y apparaisse, et en checkant le retour du postmessage j'ai un bool a vrai

    je comprend pas;;;

    cordialement

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Bizarre, pour ma part, cela marche tres bien, du moins avec ce code :

    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
        public class Form1 : Form
        {
            public const UInt16 WM_USER = 0x7FFF;
            public const UInt16 WM_TEST = WM_USER + 100;
     
            public Form1()
                : base()
            {
                InitializeComponent();
                this.Load += new EventHandler(Form1_Load);
            }
     
            void Form1_Load(object sender, EventArgs e)
            {
                this.Visible = true;
                SendMess();
            }
     
            private void SendMess()
            {
                IntPtr hand = this.Handle;
                UnsafeNativeMethods.SendMessage(hand, WM_TEST, IntPtr.Zero, IntPtr.Zero);
            }
     
            protected override void WndProc(ref System.Windows.Forms.Message m)
            {
                switch (m.Msg)
                {
                    //Fenêtre activée
                    case WM_TEST:
                        //... 
                        MessageBox.Show("WM_TEST receive", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        break;
                    // ...
                }
     
                base.WndProc(ref m);
            }
     
        }
     
        class UnsafeNativeMethods
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
            public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
        }
    Le message est bien envoyé du coté de ta DLL ? Est ce que tu passes bien dans le switch ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Points : 347
    Points
    347
    Par défaut
    Bonjour

    Merci bcp j'arrive en effet avec ton code a intecepter mon message en local mais toujours pa de ma DLL.
    Pb dans ma declaration du sendmessage
    Je vais donc regarder du coté du C++

    Cordialement

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

Discussions similaires

  1. Réponses: 31
    Dernier message: 01/08/2014, 16h53
  2. Langue des messages d'exception
    Par melleb dans le forum C#
    Réponses: 8
    Dernier message: 06/07/2007, 12h21
  3. TrayIcon et message utilisateur
    Par Nyphel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 30/01/2007, 15h42
  4. message erreur exception logicielle
    Par bertrand_declerck dans le forum Delphi
    Réponses: 2
    Dernier message: 25/09/2006, 19h49
  5. [debutant]gestion des messages des exceptions
    Par maxvador dans le forum Langage
    Réponses: 4
    Dernier message: 03/02/2006, 14h55

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