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 :

Intercepter messages windows en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut Intercepter messages windows en C#
    Bonjour à tous,
    nouveau au C#, je travaille sur une application qui doit recevoir des messages windows et des paramètres associés à partir d'une DLL.

    j'ai cru comprendre qu'il fallait surcharger WndProc, est ce bien le cas ?
    quelqu'un aurait il un exemple de code pour cette partie ?

    Merci,
    Christophe

  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
    Par défaut
    des exemples : Yen a plein sur le net

    Il faut surcharger 'overider' WndProc et ensuite comparer le message fourni à la valeur du message que tu veux traiter

    C'est pas plus compliqué que cela

    Sinon, tu peux aussi utiliser le MessageFilter de la classe Application (comme celà), t'es pas obligé de traiter les messages dans une Winform.

  3. #3
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut
    Merci pour ta réponse,
    effectivement j'en suis là... mais le problème (que j'ai oublié de préciser !) c'est que je travaille sur un windows CE 6... avec .Net compact framework.

    aussi very newbee, je cherche un exemple tout fait pour me faire la main...
    si une âme sensible peut m'aider ;-)

    christophe

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 498

  5. #5
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut
    plein le net oui ;-)
    je teste ce dernier exemple, merci.

    le code que je veux faire sur mon windows ce 6, est l'équivalent de ça sous XP :

    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
     
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            protected override void WndProc(ref System.Windows.Forms.Mess  Message m)
            {
                Debug.WriteLine(m);
                base.WndProc(ref m);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
            }
        }
    }
    une simple form, qui intercepte et log les messages WM transitant.
    je vous tient au courant.

    Merci et encore désolé, je suis very newbee, (ou développeur Delphi à la dérive C#) ;-)

    Christophe

  6. #6
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut
    Bon, j'ai le sentiment de ne pas être loin... mais ça marche pas.
    à partir de l'exemple donné par bacelar, j'essaie de faire ce petit programme en C# sur Win CE 6 qui tracera tous les messages windows transitant dans la fenêtre.

    Voici mon 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.WindowsCE.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
     
    namespace DEMOSPP3
    {
        public partial class MessageWindowForm : Form
        {
            // Create an instance of MsgWindow, a derived MessageWindow class.
            MsgWindow MsgWin;
     
            public MessageWindowForm()
            {
                InitializeComponent();
                // Create the message window using this form for its constructor.
                this.MsgWin = new MsgWindow(this);
            }
     
            // Process taps to generate messages
            // with the WParam and LParam parameters
            // using the X and Y mouse coordinates.
            protected override void OnMouseMove(MouseEventArgs e)
            {
                Message msg = Message.Create(MsgWin.Hwnd,
                 MsgWindow.WM_CUSTOMMSG,
                 (IntPtr)e.X,
                 (IntPtr)e.Y);
                MessageWindow.SendMessage(ref msg);
                base.OnMouseMove(e);
            }
     
            // This callback method responds to the Windows-based message.
            public void RespondToMessage(int x, int y)
            {
                this.Text = "X = " + x.ToString() + ", Y= " + y.ToString();
            }              
     
        }
     
        // Derive MessageWindow to respond to
        // Windows messages and to notify the
        // form when they are received.
        public class MsgWindow : MessageWindow
        {
            // Assign integers to messages.
            // Note that custom Window messages start at WM_USER = 0x400.
            public const int WM_USER = 0x400;
     
            public const int WM_CUSTOMMSG = 0x800;
     
            // Create an instance of the form.
            private MessageWindowForm msgform;
     
            // Save a reference to the form so it can
            // be notified when messages are received.
            public MsgWindow(MessageWindowForm msgform)
            {
                this.msgform = msgform;
            }
     
            // Override the default WndProc behavior to examine messages.
            protected override void WndProc(ref Message msg)
            {
                Debug.WriteLine(msg.Msg);
     
                switch (msg.Msg)
                {
                    // If message is of interest, invoke the method on the form that
                    // functions as a callback to perform actions in response to the message.
                    case WM_CUSTOMMSG:
                        this.msgform.RespondToMessage((int)msg.WParam, (int)msg.LParam);
                        Debug.WriteLine("WM_CUSTOMMSG !!!");
                        break;
                }
                // Call the base WndProc method
                // to process any messages not handled.
                base.WndProc(ref msg);
            }
        }
     
    }
    mon problème avec ce code est que je vois bien le WM_CUSTOMMSG passé, mais aucun autre ? par exemple le WM_LBUTTONDOWN...etc...
    je pensais que les autres messages seraient visibles avec le WndProc ?
    où est mon erreur ??

    merci pour toute aide.

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

Discussions similaires

  1. Intercepter les messages windows
    Par schneed dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/12/2005, 14h12
  2. Interception des messages windows
    Par sunchai dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/08/2005, 10h31
  3. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41
  4. Réponses: 2
    Dernier message: 06/04/2004, 08h39
  5. Interception Messages Windows
    Par tiramisu dans le forum MFC
    Réponses: 5
    Dernier message: 24/02/2004, 14h01

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